Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

express: what is the difference between req.query and req.body

Tags:

express

I want to know what is the difference between req.query and req.body?

below is a piece of code where req.query is used. what happens if i use req.body instead of req.query.

below function is called as a result of $resource get function. and this function checks whether the user is authenticated or a right user or not

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();
  });
});
}
like image 282
Jaspreet Singh Avatar asked Jun 18 '15 12:06

Jaspreet Singh


2 Answers

req.query contains the query params of the request.

For example in sample.com?foo=bar, req.query would be {foo:"bar"}

req.body contains anything in the request body. Typically this is used on PUT and POST requests.

For example a POST to sample.com with the body of {"foo":"bar"} and a header of type application/json, req.body would contain {foo: "bar"}

So to answer your question, if you were to use req.body instead of req.query, it would most likely not find anything in the body, and therefore not be able to validate the jwt.

Hope this helps.

like image 50
Brennan Avatar answered Oct 14 '22 12:10

Brennan


req.body is mainly used with form using POST method. You've to use enctype="application/x-www-form-urlencoded" in the form properties. As POST method don't show anything in URL, you have to use body-parser middleware if the form contains an input text with name="age" then req.body.age return the value of this feld.

req.query takes parameters in the URL (mainly GET method) example for this URL ► http://localhost/books?author=Asimov app.get('/books/', (req, res) => { console.log(req.query.author) } will return Asimov

by the way, req.params take the end part of the URL as a parameter. example for this URL ► http://localhost/books/14 app.get('/books/:id', (req, res) => { console.log(req.params.id) } will return 14

like image 25
David ROUMANET Avatar answered Oct 14 '22 13:10

David ROUMANET