快递路线中的请求正文为空

时间:2017-07-29 20:28:48

标签: node.js express body-parser

我正在使用Node.js,Express.js和MongoDB构建API。当我提交表单并在路由中使用req对象时,req.body对象为空。

当我在this question使用邮递员通过浏览器调用req.body函数时,

{}会返回get_user

app.js

var express = require('express'),
    app = express(),
    port = process.env.PORT || 3000,
    bodyParser = require('body-parser');

var mongo_server = require('./server')

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

var routes = require('./routes/users')
routes(app);

app.use(function(req, res) { 
    res.status(404).send({url: req.originalUrl + ' not found'});
});

app.listen(port);

mongo_server.mongo_connection

module.exports = app;

userController.js

var mongoose = require('mongoose'),
    user = mongoose.model('users');

exports.get_user = function(req, res) {
    console.log(req.body.id);
    user.findById(req.body.id, function(err, user) {
        console.log(req.body);
        if(err)
            res.send(err);
            res.json(user);
        });
    };

userRoutes.js

module.exports = function(app) {
    var users = require('../controllers/userController');
    app.route('/users/:userid')
       .get(users.get_user);
}

1 个答案:

答案 0 :(得分:2)

我认为您混淆了请求参数和请求主体。请求体是指您发送带有请求的信息(如有效负载),例如在您向服务器发送JSON时的POST请求中,例如,创建新用户:

{
  "username": "jd123",
  "email": "jd@example.com",
  "name": "John Doe"
}

但在您的情况下,您正在寻找参数,通过您已设置的网址传递的内容:

/users/:userid

这允许您导航到GET请求:

/users/0

然后你可以从 req.params.userid 而不是req.body.id获取0作为字符串。请求参数和正文是不同的。参数用于导航到变化的路线,例如用户简档页面,其中URL变化并且反映您想要通过用户的ID去往哪条路线。

机构用于请求的有效负载,例如POSTing,PATCHing和PUTing,提供有关在服务器上更新或创建的内容的信息。