我正在使用Node.js,Express.js和MongoDB构建API。当我提交表单并在路由中使用req
对象时,req.body
对象为空。
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);
}
答案 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,提供有关在服务器上更新或创建的内容的信息。