2017-07-29 102 views
0

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

req.body返回{}当我通过浏览器调用get_user函数使用邮递员在https://localhost:3000/users/0

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

你通过邮递员发送给服务器的是什么? –

回答

2

我想你混淆请求参数和请求主体。请求主体是当你喜欢一个有效载荷发送请求信息,比如在POST请求时您JSON发送到服务器,例如,创建一个新用户:

{ 
    "username": "jd123", 
    "email": "[email protected]", 
    "name": "John Doe" 
} 

但在你的情况,您正在寻找参数,东西通过URL传递,就像你设置:

/users/:userid 

这让你导航到一个GET请求:

/users/0 

然后你可以从req.params.userid而不是req.body.id得到0作为字符串。请求参数和主体是不同的。这些参数用于导航到不同的路线,例如用户个人资料页面,其中的URL会变化,并反映您想要通过用户ID访问哪条路线。

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

+0

谢谢,你是对的!我对请求参数感到困惑。 – user3583158