Home > database >  Express JS url parameter variable issue
Express JS url parameter variable issue

Time:02-25

I have this user route

const express = require('express');
const router = express.Router();

const {
    GetAll,
} = require('../areas/directory/controllers/usercontroller');


router.route('/getall?:username&:email').get(GetAll);


module.exports = router;

When I try to access the url in Postman like this: http://localhost:5000/api/user/getall?username=nameone&email=emailone

I get this error: Cannot GET /api/user/getall

But, if I change it to

router.route('/getall/:username&:email').get(GetAll);

and access the url in Postman like this: http://localhost:5000/api/user/getall/username=nameone&email=emailone

it works.

On the other hand, even if it works, I am unable to get the value of my variable.

var username = req.params.username;

will return username=nameone instead.

CodePudding user response:

For "http://localhost:5000/api/user/getall?username=nameone&email=emailone" to work, you should change "router.route('/getall?:username&:email').get(GetAll);" to "router.route('/getall').get(GetAll);" and use req.query.username to access the value of username query parameter and req.query.email to access the value of email query parameter. After making these changes, you can call "http://localhost:5000/api/user/getall?username=nameone&email=emailone" in Postman, you will be able to see the value of username and email in your code.

This is because you need not have to specify the query parameters in the path, like ?:username in router.route('getall').

EDIT: Adding few more details about path and query,

Please see the top 2 solutions for this question to learn more about path and query and why you should change your code to the way I mentioned above -> Node.js: Difference between req.query[] and req.params

CodePudding user response:

You should not give query parameters in URL. So, for express the url must be just /getall and in your code you access those variables using req.params.whatever_query_parameter

  • Related