0

我正在使用 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 和方法。我似乎无法隔离实际的邮件正文。

4

2 回答 2

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();
  });
}
于 2013-05-22T18:42:27.680 回答
1
if(req.method == "POST"){
    var body = '';
    req.on('data', function(data){
        body += data;
    });
}

如果您正确发布,则正文应包含您的消息。

一个更好的主意是使用 Express,然后使用 bodyparser 中间件——它可以为您提供开箱即用的功能,而不必担心有人会破坏您的服务器。上面的代码没有担心攻击的功能 - 但它会让你开始。

于 2013-05-22T18:40:52.503 回答