By XMen


2011-08-02 13:08:31 8 Comments

Can we get the variables in the query string in Node.js just like we get them in $_GET in PHP?

I know that in Node.js we can get the URL in the request. Is there a method to get the query string parameters?

26 comments

@Omkar Bandkar 2016-05-26 07:57:48

There are 2 ways to pass parameters via GET method

Method 1 : The MVC approach where you pass the parameters like /routename/:paramname
In this case you can use req.params.paramname to get the parameter value For Example refer below code where I am expecting Id as a param
link could be like : http://myhost.com/items/23

var express = require('express');
var app = express();
app.get("items/:id", function(req, res) {
    var id = req.params.id;
    //further operations to perform
});
app.listen(3000);

Method 2 : General Approach : Passing variables as query string using '?' operator
For Example refer below code where I am expecting Id as a query parameter
link could be like : http://myhost.com/items?id=23

var express = require('express');
var app = express();
app.get("/items", function(req, res) {
    var id = req.query.id;
    //further operations to perform
});
app.listen(3000);

@Mehedi Abdullah 2018-07-31 18:41:02

app.get('/user/:id', function(req, res) {
    res.send('user' + req.params.id);    
});

You can use this or you can try body-parser for parsing special element from the request parameters.

@Nico Haase 2018-07-31 19:08:58

Can you explain further how this answers the question?

@Nico Haase 2018-08-01 07:56:46

And how does this parse an existing parameter list?

@Mehedi Abdullah 2018-08-03 12:24:17

you may use body-parser module from node.js

@Sarthak Dalabehera 2019-11-11 12:25:38

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('id: ' + req.query.id);
});

app.listen(3000);

@abcbc 2019-10-06 17:16:56

So, there are two ways in which this "id" can be received: 1) using params: the code params will look something like : Say we have an array,

const courses = [{
    id: 1,
    name: 'Mathematics'
},
{
    id: 2,
    name: 'History'
}
];

Then for params we can do something like:

app.get('/api/posts/:id',(req,res)=>{
    const course = courses.find(o=>o.id == (req.params.id))
    res.send(course);
});

2) Another method is to use query parameters. so the url will look something like ".....\api\xyz?id=1" where "?id=1" is the query part. In this case we can do something like:

app.get('/api/posts',(req,res)=>{
    const course = courses.find(o=>o.id == (req.query.id))
    res.send(course);
});

@chings228 2019-08-01 06:23:47

why not mixed with server code

e.g . php

<script>
var ip=<?php echo($_SERVER['REMOTE_ADDR']);?>

</script>

@Md. A. Barik 2019-07-10 12:52:44

It actually simple:

const express= require('express');
const app = express();

app.get('/post', (req, res, next) => {
  res.send('ID:' + req.query.id + ' Edit:'+ req.query.edit);
});

app.listen(1000);

// localhost:1000/post?id=123&edit=true
// output: ID: 123 Edit: true

@Moulali M 2019-03-07 12:44:31

--------Accessing Query String Data-------
Suppose this is the link http://webapplog.com/search?term=node.js&page=1

So in express you can use :

  • req.query.term
  • req.query.page or
  • req.query (it will fetch the query in an Object)

    //Example
    app.get('http://webapplog.com/search?term=node.js&page=1',(req, res)=>{ res.json({term:req.query.term, page:req.query.page}) })

--------Accessing URL Parameters-------
Suppose this is the link http://webapplog.com/node.js/pages/100
So in express you can use : app.get('/:term/pages/:page',....)

  • req.params.term
  • req.params.page

    // Example
    app.get('http://webapplog.com/:term/pages/:page',(req, res)=>{ res.json({term:req.params.term, page:req.params.page}) })

@Peter S. 2019-04-15 13:31:47

From my point of view I think that many people mix two different concepts. During the REST development I was familiar with passing information in the URL with two ways "path variables" and "request parameters"(query parameters). The RFC describes the parts of URI like this: enter link description here So I understood that author would like to know how to pass request parameters. I would only want to make the topic easier to understand, but the solution was mentioned here many times.

You can get query parameters from the URI with request.query.<name of the parameter>, the second mentioned solution was request.params.<name of the parameter> and with this you can get the path variables.

@Ankit Singh 2019-02-08 12:34:50

In Express, we can simply use req.query.<name>. It's works same as that of $_GET['name'] in PHP.

@Marcus Granström 2011-08-02 13:30:16

In Express it's already done for you and you can simply use req.query for that:

var id = req.query.id; // $_GET["id"]

Otherwise, in NodeJS, you can access req.url and the builtin url module to [url.parse] (https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost) it manually:

var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;

@befzz 2013-06-30 08:15:06

attention here: .parse(url,true) url.parse(urlStr, [parseQueryString], [slashesDenoteHost])

@BaltoStar 2013-08-05 18:44:58

What additional/better functionality does hapi provide ( if any ) ?

@Cheeso 2013-08-23 03:28:39

This is accepted but it's not the preferred answer. See below! use req.query

@MindJuice 2014-06-19 15:14:45

mikemcneil's answer below is a better choice. Use req.query or req.param (which is different than req.params...see below.

@lunohodov 2016-03-25 11:55:47

-1. Code above is a deadweight — something a good developer will refactor on the spot. This is an answer to "How to get the query string of an URL?" — the URL in question just happens to be in an object named request and has nothing to do with Express. See @whitequark's answer below (use request.query)

@Alexander Craggs 2016-07-23 20:03:12

I don't suppose there's a method to take a group vote on unaccepting this answer and accepting the answer below? I'm terrified how many people this will have misled considering the 400,000 views.

@Pavel P 2016-08-28 15:54:52

totally agree, this answer is far from optimal. Why nobody corrected it then for such a long time

@nilakantha singh deo 2016-11-13 02:54:53

res.send('Response send to client::'+req.query.id); would be a good choice.

@xurei 2017-05-26 13:05:08

Seems outdated. @yash-bele answer seems better, as you don't need any extra module.

@Felipe Toledo 2019-03-25 02:39:46

req.query worked for me! And It is the apropiate for string parameters

@uniqueNt 2019-07-03 05:48:21

in my case url.parse(req.url, true).query; worked

@Steven Spungin 2017-02-18 15:00:23

If you are using ES6 and Express, try this destructuring approach:

const {id, since, fields, anotherField} = request.query;

In context:

const express = require('express');
const app = express();

app.get('/', function(req, res){
   const {id, since, fields, anotherField} = req.query;
});

app.listen(3000);

You can use default values with destructuring too:

// sample request for testing
const req = {
  query: {
    id: '123',
    fields: ['a', 'b', 'c']
  }
}

const {
  id,
  since = new Date().toString(),
  fields = ['x'],
  anotherField = 'default'
} = req.query;

console.log(id, since, fields, anotherField)

@Lead Developer 2019-08-24 16:09:22

Using object destructuring with default values! +1

@ajafik 2017-09-03 15:19:06

You can use with express ^4.15.4:

var express = require('express'),
    router = express.Router();
router.get('/', function (req, res, next) {
    console.log(req.query);
});

Hope this helps.

@Kevin Alemán 2018-08-18 23:24:28

In express.js you can get it pretty easy, all you need to do in your controller function is:

app.get('/', (req, res, next) => {
   const {id} = req.query;
   // rest of your code here...
})

And that's all, assuming you are using es6 syntax.

PD. {id} stands for Object destructuring, a new es6 feature.

@user752746 2018-09-06 17:31:28

I'm using express with node so this worked perfectly for me. Thank you!

@Tính Ngô Quang 2018-07-10 06:02:37

I am using MEANJS 0.6.0 with [email protected], it's good

Client:

Controller:

var input = { keyword: vm.keyword };
ProductAPi.getOrder(input)

services:

this.getOrder = function (input) {return $http.get('/api/order', { params: input });};

Server

routes

app.route('/api/order').get(products.order);

controller

exports.order = function (req, res) {
  var keyword = req.query.keyword
  ...

@Codemaker 2018-07-05 04:27:27

you can use url module to collect parameters by using url.parse

var url = require('url');
var url_data = url.parse(request.url, true);
var query = url_data.query;

In expressjs it's done by,

var id = req.query.id;

Eg:

var express = require('express');
var app = express();

app.get('/login', function (req, res, next) {
    console.log(req.query);
    console.log(req.query.id); //Give parameter id
});

@mikermcneil 2012-02-11 18:49:44

In Express, use req.query.

req.params only gets the route parameters, not the query string parameters. See the express or sails documentation:

(req.params) Checks route params, ex: /user/:id

(req.query) Checks query string params, ex: ?id=12 Checks urlencoded body params

(req.body), ex: id=12 To utilize urlencoded request bodies, req.body should be an object. This can be done by using the _express.bodyParser middleware.

That said, most of the time, you want to get the value of a parameter irrespective of its source. In that case, use req.param('foo').

The value of the parameter will be returned whether the variable was in the route parameters, query string, or the encoded request body.

Side note- if you're aiming to get the intersection of all three types of request parameters (similar to PHP's $_REQUEST), you just need to merge the parameters together-- here's how I set it up in Sails. Keep in mind that the path/route parameters object (req.params) has array properties, so order matters (although this may change in Express 4)

@Joseph Juhnke 2014-11-06 20:07:55

req.param('STRING') is the correct answer. See here: stackoverflow.com/questions/17007997/… (scroll down to answer below the accepted answer)

@mikermcneil 2015-01-23 17:24:45

@deltab here's a link to req.params in the Sails docs: sailsjs.org/#/documentation/reference/req/req.params.html and the new express docs: expressjs.com/4x/api.html#req.params

@swang 2016-08-31 16:01:20

req.param is deprecated in express 4.x, should use req.params, req.body or req.query instead: expressjs.com/en/4x/api.html#req.param

@mikermcneil 2016-10-09 01:39:15

@swang is right- I double-checked with Doug Wilson recently about this, and the req.param() helper function is likely to be completely removed in Express 5. This won't be imminent until some time later in 2017, so I'll wait to edit this answer until then. In the mean time: It's safe to use req.param() with Express <=3.x / Sails <=0.12, and with the latest available release of Express 4, albeit w/ a deprecation log message. (For Sails users: The implementation of req.param() will move into core as of Sails v1.0, and it will continue to be fully supported in Sails in the future.)

@Yash Bele 2017-05-07 08:22:07

You can use

request.query.<varible-name>;

@bigboss 2017-02-15 02:35:09

//get query&params in express

//etc. example.com/user/000000?sex=female

app.get('/user/:id', function(req, res) {

  const query = req.query;// query = {sex:"female"}

  const params = req.params; //params = {id:"000000"}

})

@james d'angelo 2014-09-06 12:29:55

Whitequark responded nicely. But with the current versions of Node.js and Express.js it requires one more line. Make sure to add the 'require http' (second line). I've posted a fuller example here that shows how this call can work. Once running, type http://localhost:8080/?name=abel&fruit=apple in your browser, and you will get a cool response based on the code.

var express = require('express');
var http = require('http');
var app = express();

app.configure(function(){
    app.set('port', 8080);
});

app.get('/', function(req, res){
  res.writeHead(200, {'content-type': 'text/plain'});
  res.write('name: ' + req.query.name + '\n');
  res.write('fruit: ' + req.query.fruit + '\n');
  res.write('query: ' + req.query + '\n');
  queryStuff = JSON.stringify(req.query);
  res.end('That\'s all folks'  + '\n' + queryStuff);
});

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
})

@Saran Pal 2014-03-19 11:19:52

It is so simple:

Example URL:

http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK

You can print all the values of query string by using:

console.log("All query strings: " + JSON.stringify(req.query));

Output

All query strings : { "id":"3","activatekey":"$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjz fUrqLrgS3zXJVfVRK"}

To print specific:

console.log("activatekey: " + req.query.activatekey);

Output

activatekey: $2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK

@adriano72 2013-01-26 08:42:32

A small Node.js HTTP server listening on port 9080, parsing GET or POST data and sending it back to the client as part of the response is:

var sys = require('sys'),
url = require('url'),
http = require('http'),
qs = require('querystring');

var server = http.createServer(

    function (request, response) {

        if (request.method == 'POST') {
                var body = '';
                request.on('data', function (data) {
                    body += data;
                });
                request.on('end',function() {

                    var POST =  qs.parse(body);
                    //console.log(POST);
                    response.writeHead( 200 );
                    response.write( JSON.stringify( POST ) );
                    response.end();
                });
        }
        else if(request.method == 'GET') {

            var url_parts = url.parse(request.url,true);
            //console.log(url_parts.query);
            response.writeHead( 200 );
            response.write( JSON.stringify( url_parts.query ) );
            response.end();
        }
    }
);

server.listen(9080);

Save it as parse.js, and run it on the console by entering "node parse.js".

@danwellman 2014-02-09 18:46:35

you don't need to require sys in this example

@Grant Li 2012-11-26 16:26:24

I learned from the other answers and decided to use this code throughout my site:

var query = require('url').parse(req.url,true).query;

Then you can just call

var id = query.id;
var option = query.option;

where the URL for get should be

/path/filename?id=123&option=456

@ossek 2014-10-24 05:12:48

won't id and option be undefined since query is just a string? we'd have to parse out the two separate parameters with a regex or the like.

@whitfin 2015-02-01 19:18:54

@ossek I believe the act of causing parse on req.url converts to an object.

@Bharat 2015-03-08 16:30:12

@ossek, he's provided true as a second argument to url.parse, which makes the query property point to an object ( and that internally uses querystring module) you can find more about it in the docs [here] (nodejs.org/docs/latest/api/…)

@Cris-O 2011-08-02 15:38:27

For Express.js you want to do req.params:

app.get('/user/:id', function(req, res) {
  res.send('user' + req.params.id);    
});

@Ben Sinclair 2011-12-16 08:40:13

to retrieve GET variables in express.js you can use req.query.

@Cris-O 2011-12-18 23:19:07

@Andy req.params is better because: req.param(name[, default]) will: Return the value of param name when present or default. Checks route params (req.params), ex: /user/:id Checks query string params (req.query), ex: ?id=12Checks urlencoded body params (req.body), ex: id=12 To utilize urlencoded request bodies, req.body should be an object. This can be done by using the _express.bodyParser middleware.

@Ben Sinclair 2011-12-19 11:14:52

I didn't know req.param checks for req.query, thanks for this note.

@mikermcneil 2012-02-11 18:51:26

req.param('parameterName') will check for req.body, req.query, and req.params, but if you want all of the query parameters as an object, you should use req.query.

@Ben Sinclair 2013-05-02 06:48:25

@mikermcneil you probably mixed up req.param() and req.params (object). According to expressjs docs req.param() looks for value in all three objects. expressjs.com/api.html#req.param

@mikermcneil 2013-05-03 02:49:42

Hey Andy- sorry, I misread your comment and thought you said "req.params" Not enough sleep, I guess!

@whitequark 2011-08-02 14:00:36

Since you've mentioned Express.js in your tags, here is an Express-specific answer: use req.query. E.g.

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('id: ' + req.query.id);
});

app.listen(3000);

@alex 2013-02-28 05:40:05

Worth mentioning that you should use req.query.id, no need to use bracket notation.

@Felipe 2015-02-02 19:43:59

To install express do it: yes | sudo npm install -g express --- I tried to edit but Alexis King have been reverted.

@Richard Torcato 2016-06-16 11:07:19

in the question he was looking for a way to get all the query string parameters like an array. The correct answer is this: app.get('/', function(req, res){ console.log(req.query); });

@RobertPitt 2011-08-02 13:44:47

You should be able to do something like this:

var http = require('http');
var url  = require('url');

http.createServer(function(req,res){
    var url_parts = url.parse(req.url, true);
    var query = url_parts.query;

    console.log(query); //{Object}

    res.end("End")
})

@Mars Robertson 2012-08-05 17:52:31

UPDATE 4 May 2014

Old answer preserved here: https://gist.github.com/stefek99/b10ed037d2a4a323d638


1) Install express: npm install express

app.js

var express = require('express');
var app = express();

app.get('/endpoint', function(request, response) {
    var id = request.query.id;
    response.end("I have received the ID: " + id);
});

app.listen(3000);
console.log("node express app started at http://localhost:3000");

2) Run the app: node app.js

3) Visit in the browser: http://localhost:3000/endpoint?id=something

I have received the ID: something


(many things have changed since my answer and I believe it is worth keeping things up to date)

Related Questions

Sponsored Content

18 Answered Questions

[SOLVED] How to exit in Node.js

  • 2011-03-10 21:30:05
  • Bryan Field
  • 847264 View
  • 1773 Score
  • 18 Answer
  • Tags:   node.js

36 Answered Questions

[SOLVED] How do I debug Node.js applications?

6 Answered Questions

[SOLVED] Read environment variables in Node.js

44 Answered Questions

[SOLVED] How can I update NodeJS and NPM to the next versions?

33 Answered Questions

73 Answered Questions

[SOLVED] How can I get query string values in JavaScript?

31 Answered Questions

3 Answered Questions

[SOLVED] How do I get started with Node.js

  • 2010-03-01 04:09:28
  • Joneph O.
  • 1230608 View
  • 1264 Score
  • 3 Answer
  • Tags:   javascript node.js

8 Answered Questions

[SOLVED] How to access the GET parameters after "?" in Express?

17 Answered Questions

[SOLVED] How to decide when to use Node.js?

Sponsored Content