您已經創建的服務器還好吧,但有兩個問題:
- 連接端點。你的AJAX是
POST
,所以你需要正確解析POST
請求(不完全解決你的問題,但你需要區分請求方法)。
- Node.js的默認情況下不解析您
POST
的身體,你需要告訴它,它是如何做的,通過使用querystring
模塊,例如。
兩者結合,這樣的:
var qs = require('querystring');
http.createServer(function(req, res) {
if (request.method == 'POST') {
var body = '';
request.on('data', function(data) {
body += data;
});
request.on('end', function() {
var post = qs.parse(body);
// Use your POST here
console.log(post);
});
}
}).listen(3000);
JSON數據 - 清潔的解決方案:
你需要用JSON
編碼您的AJAX的數據,比解析它在服務器端像這樣:
http.createServer(function(req,res) {
if (req.method == 'POST') {
var jsonPost = '';
req.on('data', function(data) {
jsonPost += data;
});
req.on('end', function() {
var post = JSON.parse(jsonPost);
// Use your POST here
console.log(post);
});
}
}).listen(3000);
你會更好使用Express.js框架,與它的bodyParser
模塊。
更新 - 塊是如何緩衝:
考慮簡單的例子 - 在xhr.send()
發送文本的大量,超過Content-Length
。比起做data
事件如下:
req.on('data', function(data) {
console.log(data);
body += data;
});
你會看到類似這樣的:
<Buffer 0a 0a 4c 6f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 73 69 74 20 61 6d 65 74 2c 20 63 6f 6e 73 65 63 74 65 74 75 72 20 61 64 69 70 69 73 63 69 ... >
<Buffer 65 74 20 71 75 61 6d 20 63 6f 6e 67 75 65 20 6c 6f 62 6f 72 74 69 73 2e 20 50 65 6c 6c 65 6e 74 65 73 71 75 65 20 74 65 6d 70 75 73 20 75 6c 6c 61 6d ... >
<Buffer 61 2e 20 56 69 76 61 6d 75 73 20 76 69 74 61 65 20 61 6e 74 65 20 6d 65 74 75 73 2e 20 4d 61 75 72 69 73 20 71 75 69 73 20 61 6c 69 71 75 65 74 20 65 ... >
這表明,在大塊收到data
事件的數據。只有在end
事件中,您纔會收到發送的全部數據(如果您在此之前彙總了它)。 Node.js不處理這個問題,這就是爲什麼你需要第三方模塊。
也就是說 - 你不能只得到req.body
的請求,因爲它根本沒有設置。
您是否爲''/''定義了任何路線? – abdulbarik
@abdulbarik謝謝,我認爲http.createServer會收到任何請求。不管路線如何。 – suoyong