2013-05-21 60 views
0

我试图发送一个请求,但它没有发送。我没有在浏览器的控制台日志中获得输出。node.js发送POST请求不起作用

我的节点server.js在x.x.x.x:8000中运行,然后将其与我的client.html连接。 x.x.x.x:8000/client.html

这是我的node.js服务器。

function handler (req, res) { 

    var filepath = '.' + req.url; 
    if (filepath == './') 
     filepath = './client.html'; 

    var extname = path.extname(filepath); 
    var contentType = 'text/html'; 

    switch(extname){ 
    case '.js': 
      contentType = 'text/javascript'; 
      break; 
    case '.css': 
      contentType = 'text/css'; 
      break; 
    } 

    path.exists(filepath, function (exists){ 
     if (exists){ 
      fs.readFile(filepath, function(error, content){ 
       if(error){ 
        res.writeHead(500); 
        res.end(); 
       } 
       else{ 
        res.writeHead(200, { 'Content-Type': contentType }); 
        res.end(content, 'utf-8'); 
       } 
      }); 
     } 
     else{ 
      res.writeHead(404); 
      res.end(); 
     } 
    }); 


} 

JavaScript代码 - 我使用Ajax调用发送请求到COMMAND.php

$.post( 
       '/var/www/COMMAND.php', 
       { cmd: "OUT" }, 
       function(data){ 

       console.log(data); 



       }); 

PHP COMMAND.php - 此写入命名管道的Linux操作系统。完成后写回声成功。

<?php 

if ($_POST['cmd'] === 'OUT') { 
    $con = fopen("/tmp/myFIFO", "w"); 
    fwrite($con, "OUT\n"); 
    fclose($con); 
    echo "SUCCESS"; 
    exit; 
} 

?> 

为什么它不向COMMAND.php发送任何请求?有没有办法让我调用COMMAND.php并执行其中的命令?

回答

1

因为NodeJS运行JS,而不是PHP。另外,与NodeJS中内置文件处理的Apache不同,您需要构建代码或使用现有的库将您的url传递到文件。

至于你的问题,它要么你:

  • 安装另一台服务器来执行PHP。您的AJAX正在调用您的NodeJS服务器。你可以将这个请求从NodeJS路由到你的PHP服务器(Apache或其他),基本上使得NodeJS像代理一样工作。

  • 或者在NodeJS的JavaScript代码中创建代码,该代码运行与PHP脚本类似的例程,并且不再需要PHP或其他服务器。

+0

谢谢你,当我改变“/var/www/COMMAND.php”在我的JavaScript到http://xxxx/COMMAND.php它的工作原理是写入命名管道,但我得到的XMLHttpRequest无法加载HTTP://xxxx/COMMAND.php。 Access-Control-Allow-Origin不允许原始http://x.x.x.x:8000。 – Defyleiti

+0

@Defyleiti这将归因于[同源策略](http://en.wikipedia.org/wiki/Same_origin_policy)。 – Joseph