我正在使用Node.js并连接以创建一个简单的Web服务器。我有类似于以下代码的东西,我无法弄清楚如何从请求对象访问实际的请求消息体。我是新手,所以忍受我。我也拿出了一些不必要的例子。
function startServer(dir) {
var port = 8888,
svr = connect().use(connect.static(dir, {"maxAge" : 86400000}))
.use(connect.directory(dir))
/*
* Here, I call a custom function for when
* connect.static can't find the file.
*/
.use(custom);
http.createServer(svr).listen(port);
}
function custom(req, res) {
var message = /* the message body in the req object */;
// Do some stuff with message...
}
startServer('dirName');
有意义吗?我已经尝试将该对象记录到控制台,它充满了大量的东西。我可以轻松地在那里看到标题以及请求URL和方法。我似乎无法隔离实际的消息体。
答案 0 :(得分:2)
您还应该包含connect.bodyParser
中间件:
svr = connect().use(connect.static(dir, {"maxAge" : 86400000}))
.use(connect.directory(dir))
.use(connect.bodyParser())
.use(custom);
这将为您的处理程序提供已解析邮件正文req.body
。
如果您想要原始邮件正文,则不应使用它,而是自己阅读req
邮件流:
function custom(req, res) {
var chunks = [];
req.on('data', function(chunk) {
chunks.push(chunk);
});
req.on('end', function() {
var rawbody = Buffer.concat(chunks);
...do stuff...
// end the request properly
res.end();
});
}
答案 1 :(得分:1)
if(req.method == "POST"){
var body = '';
req.on('data', function(data){
body += data;
});
}
如果您正确发布,则正文应包含您的消息。
更好的想法是使用Express,然后使用bodysarser中间件 - 这将为您提供开箱即用的功能,而不用担心有人锤击您的服务器。上面的代码没有任何功能可以担心攻击 - 但它会让你开始。