如何创建仅接收POST请求的Node服务器

4

我需要创建一个仅接收POST请求的Node服务器。通过请求主体中的信息,我需要创建一个系统调用。 我该如何操作?到目前为止,我只有以下代码:

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

app.use(bodyParser);
app.post('/', function(req, res){
    console.log('POST /');
    console.dir(req.body);
});

port = 3000;
app.listen(port);
console.log('Listening at http://localhost:' + port)

然而,当我向127.0.0.1:3000发送POST请求时,请求体为未定义。

var request = require('request');

request.post(
    '127.0.0.1:3000',
    { form: { "user": "asdf" } },
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)
        }
    }
);

你的实际POST请求是什么样子? - Tholle
你使用的Node版本是哪个? - sam100rav
@Tholle - 我已经编辑了问题主体,加入了Node中的Post请求。 - user2874945
请按照以下示例将bodyParser用作中间件,并告知您是否仍然遇到问题。 - sam100rav
2个回答

3
您在这里遇到了一个中间件问题。在Express 4.x中,express.bodyparser()中间件已被弃用。这意味着您应该使用独立的bodyparser中间件。
奇怪的是,您通过以下方式导入了正确的中间件: var bodyParser = require('body-parser'); 然而,您应该以不同的方式使用它。请查看文档和示例。
var app = require('express')();
var bodyParser = require('body-parser');
var multer = require('multer'); 

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data

app.post('/', function (req, res) {
  console.log(req.body);
  res.json(req.body);
})

2
var app = require('express')();
var bodyParser = require('body-parser');
var multer = require('multer'); 

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing     application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data

app.post('/', function (req, res) {
console.log(req.body);
res.json(req.body);
})

在最新版本的Express中,不再使用express.bodyParser。请参阅参考文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接