我不缺乏向节点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
可能是我失明并且监督一些微不足道的事情,但我不知道是什么:)
答案 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数据,因此我不得不使用其配置选项来增加限制。