2014-03-12 71 views
0

我試圖通過nodejs讀取POST數據。我有下面的代碼片段:簡單節點讀取POST

var http = require("http"); 



console.log("Server created at 127.0.0.1:8989"); 


var server = http.createServer(handler).listen(8989); 

function handler(req,res) 
{ 
    console.log("Client Connected"); 
    // res.writeHead(200,{"Content-type": "text/html"}); 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.end('<html><body><form method="POST"><input type="text" name="name"><input type="submit" value="send"></form></body></html>'); 
    if(req.method==="POST") 
    { 
     var body=""; 
     console.log("Post is being sent"); 
     req.on('data',function handlePost(chunck){ 
     body+= chunck; 
      }); 
     req.on("end",function(){ 
      console.log(body + "<--"); 
     }) 
    } 




}\\ 

但是程序的行爲如同「數據」事件從未發生過? 身體變量永遠不會被記錄

感謝

回答

1

的if/else你應該作出這樣的。就像你現在擁有的那樣,你總是會結束請求(使用res.end),而不管它是否發佈。

function handler(req,res) 
{ 
    console.log("Client Connected"); 
    if(req.method==="POST") 
    { 
     var body=""; 
     console.log("Post is being sent"); 
     req.on('data',function handlePost(chunck){ 
     body+= chunck; 
      }); 
     req.on("end",function(){ 
      console.log(body + "<--"); 
     }) 
    } else { 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.end('<html><body><form method="POST"><input type="text" name="name"><input type="submit" value="send"></form></body></html>'); 
    } 
} 

第二個例子。在帖子後重新返回表單並顯示一條消息。

function handler(req,res) 
{ 
    console.log("Client Connected"); 
    if(req.method==="POST") 
    { 
     var body=""; 
     console.log("Post is being sent"); 
     req.on('data',function handlePost(chunck){ 
     body+= chunck; 
     }); 
     req.on("end",function(){ 
     var name = body.match(/name=(\w+)/)[1]; 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.end('<html><body>Welcome back, ' + name + '<form method="POST"><input type="text" name="name" value="' + name + '"><input type="submit" value="send"></form></body></html>'); 
     }); 
    } else { 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.end('<html><body><form method="POST"><input type="text" name="name"><input type="submit" value="send"></form></body></html>'); 
    } 
} 

第二個示例運行這樣的... 如果它不是一個POST,只是發送形式。 如果它是一個POST, 收到正文 時,這是完成 與表格一起發送消息。

+0

它確實工作,但我不知道爲什麼。爲什麼我的代碼無法正常工作?如果帖子沒有發送,nodejs不應該提供html嗎?我的if語句不夠嗎? – Bula

+0

當您調用res.end時,它會關閉所有關聯的套接字,包括請求的套接字。這意味着身體不再被髮送。 GET(發送表單)和POST以及兩個完全不同的情況需要獨立處理。 –

+0

因此,解決這個問題的方法是在if語句中處理帖子,並獲取其他內容? – Bula