如何仅为POST请求创建节点服务器

时间:2015-07-16 16:44:02

标签: javascript node.js express

我只需创建一个Node服务器来接收POST请求。有了请求正文中的信息,我需要创建一个系统调用。我该怎么办?到目前为止,我只有:

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)
        }
    }
);

2 个答案:

答案 0 :(得分:3)

这里有中间件问题。 Express 4.x中不推荐使用express.bodyparser()中间件。这意味着您应该使用独立的bodyparser中间件。

奇怪的是,您正在通过执行以下操作导入正确的中间件:

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

但是,您应该以不同的方式使用它。看一下the docs和给出的例子:

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);
})

答案 1 :(得分: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。请参阅reference