2013-05-21 63 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