我想知道req.query和req.body之间有什么区别?
下面的是使用req.query
的一段代码。如果我使用req.body
而不是req.query
会发生什么。
下面的函数是$resource
get函数调用的结果。此功能检查用户是否经过身份验证或是否是正确的用户
function isAuthenticated() {
return compose()
// Validate jwt
.use(function(req, res, next) {
// allow access_token to be passed through query parameter as well
if(req.query && req.query.hasOwnProperty('access_token')) {
req.headers.authorization = 'Bearer ' + req.query.access_token;
}
validateJwt(req, res, next);
})
// Attach user to request
.use(function(req, res, next) {
User.findById(req.user._id, function (err, user) {
if (err) return next(err);
if (!user) return res.send(401);
req.user = user;
next();
});
});
}
答案 0 :(得分:10)
req.query包含请求的查询参数。
例如,在sample.com?foo=bar
中,req.query
将为{foo:"bar"}
req.body包含请求正文中的所有内容。通常,这会在PUT
和POST
请求中使用。
例如POST
到sample.com,主体为{"foo":"bar"}
,标头为application/json
,req.body
将包含{foo: "bar"}
所以要回答你的问题,如果你使用req.body
代替req.query
,那么它很可能在身体中找不到任何东西,因此无法验证jwt。
希望这有帮助。
答案 1 :(得分:0)
要求正文主要与使用POST方法的表单一起使用。
您必须在表单属性中使用enctype="application/x-www-form-urlencoded"
。由于POST方法不会在URL中显示任何内容,因此您必须使用body-parser中间件
如果表单包含名称为“ age”的输入文本,则req.body.age返回该字段的值。
请求查询在URL中获取参数(主要是GET方法)
此URL的示例►http://localhost/books?author=Asimov
app.get('/books/', (req, res) => { console.log(req.query.author) }
将返回Asimov
顺便说一句, req.params 将URL的结尾部分作为参数。
此URL的示例►http://localhost/books/14
app.get('/books/:id', (req, res) => { console.log(req.params.id) }
将返回14