表达:req.query和req.body之间有什么区别

时间:2015-06-18 12:31:06

标签: express

我想知道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();
  });
});
}

2 个答案:

答案 0 :(得分:10)

req.query包含请求的查询参数。

例如,在sample.com?foo=bar中,req.query将为{foo:"bar"}

req.body包含请求正文中的所有内容。通常,这会在PUTPOST请求中使用。

例如POST到sample.com,主体为{"foo":"bar"},标头为application/jsonreq.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