Node JS:我的POST数据在哪里?

时间:2014-08-05 14:35:47

标签: node.js post

我不缺乏向节点js服务器发送POST请求。我有一个简单的请求和一个简单的服务器。

我的服务器代码是:

var http = require('http');
var bodyParser   = require('body-parser');
http.createServer(function (req, res) {

console.log(req.body);

res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/')

我的客户请求代码是:

var val = JSON.stringify({ city:"SomeCity", name:"MyNameIsHere" });
alert(val);
$.ajax({
     url: 'http://127.0.0.1:1337',
     type: 'POST',
     data: { value:  val},
     success: function(result) {
         alert('the request was successfully sent to the server');}
});

所以我想在节点js服务器的请求主体中获取 SomeCity MyNameIsHere 字符串,但是req.body字段是未定义的。不得不说我用本地URL请求代码打开我的test.html:

file:///D:/Projects/test.html

可能是我失明并且监督一些微不足道的事情,但我不知道是什么:)

3 个答案:

答案 0 :(得分:2)

  

不得不说我用本地URL请求代码打开我的test.html,如下所示:   file:///D:/Projects/test.html

您尝试发布跨域,在这种情况下您无法发布。通过HTTP提供HTML服务,以便您可以进行POST。如果您使用浏览器的开发工具,您将看到请求永远不会到达您的Node.js服务器(除了可能的CORS飞行前请求)。

另一个问题是你实际上并没有使用body-parser。如果您想要发布数据,则必须像流一样从req读取。

答案 1 :(得分:0)

您在var bodyParser = require('body-parser');中加入了“body-parser”,但实际上并没有使用它。它不会神奇地解析您的请求。默认的request对象没有body属性...请参阅the documentation

如果您想使用body-parser模块,您应该使用express.js并阅读有关如何将其作为中间件连接的文档。

如果你想使用内置的http服务器来获取正文,你需要首先使用request对象来使用这样的东西:

if (req.method == 'POST') {
    var body = '';
    req.on('data', function(data) {
        body += data;
        if (body.length > 1000000) {
            req.connection.destroy();
        }
    });
    req.on('end', function () {
        console.log(req.body);

        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World\n');
    });
}

答案 2 :(得分:0)

添加快速库和bodyparser作为中间件就可以了。但是我可以使用neelsg回答的代码,但是使用内置的http服务器和处理我自己的Post数据太麻烦了。 所以我的工作代码就在这里:

var express = require('express');
var http    = require('http');
var url     = require('url');
var bodyParser   = require('body-parser');

var app = express();
app.use(express.bodyParser(
{
    keepExtensions: true,
    limit: 30*1024*1024 // lets handle big data  
}
));
app.use(bodyParser.urlencoded());

Bodyparser默认情况下只能处理post请求中的100Kb数据,因此我不得不使用其配置选项来增加限制。