¿Cómo obtener las variables GET (cadena de consulta) en Express.js en Node.js?

¿Podemos obtener las variables en la cadena de consulta en Node.js tal como las obtenemos en $_GET en PHP?

Sé que en Node.js podemos obtener la URL en la solicitud. ¿Hay algún método para obtener los parámetros de la cadena de consulta?

Sí, puede acceder a req.url y al módulo de url incorporado a url.parse de forma manual:

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

Sin embargo, en expressjs ya está hecho para ti y simplemente puedes usar req.query para eso:

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

Como ha mencionado Express.js en sus tags, aquí hay una respuesta específica de Express: use req.query . P.ej

 var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('id: ' + req.query.id); }); app.listen(3000); 

En Express, use req.query .

req.params solo obtiene los parámetros de ruta, no los parámetros de cadena de consulta. Ver la documentación expresa o de velas :

(req.params) Comprueba los parámetros de la ruta, por ejemplo: / user /: id

(req.query) Comprueba los parámetros de cadena de consulta, ex:? id = 12 Comprueba los parametros de cuerpo urlencoded

(req.body), ex: id = 12 Para utilizar cuerpos de solicitud urlencoded, req.body debería ser un objeto. Esto se puede hacer utilizando el middleware _express.bodyParser.

Dicho esto, la mayoría de las veces, desea obtener el valor de un parámetro independientemente de su origen. En ese caso, use req.param('foo') .

El valor del parámetro se devolverá ya sea que la variable esté en los parámetros de ruta, en la cadena de consulta o en el cuerpo de solicitud codificado.

$_REQUEST : si pretendes obtener la intersección de los tres tipos de parámetros de solicitud (similar a $_REQUEST PHP), solo necesitas fusionar los parámetros, así es como lo configuré en Sails . Tenga en cuenta que el objeto de parámetros ruta / ruta (parámetros req.params ) tiene propiedades de matriz, por lo que el orden es importante (aunque esto puede cambiar en Express 4 )

Para Express.js, quiere hacer req.params :

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

Aprendí de las otras respuestas y decidí usar este código en mi sitio:

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

Entonces solo puedes llamar

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

donde la URL para obtener debería ser

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

Deberías poder hacer algo como esto:

 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") }) 
 //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"} }) 

Hay 2 formas de pasar parámetros a través del método GET

Método 1: El método MVC donde pasa los parámetros como / routename /: paramname
En este caso, puede usar req.params.paramname para obtener el valor del parámetro. Por ejemplo, consulte el siguiente código donde estoy esperando Id como param.
el enlace podría ser como: 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); 

Método 2: Enfoque general: pasar variables como cadena de consulta con ‘?’ operador
Por ejemplo, consulte el siguiente código donde estoy esperando Id como parámetro de consulta
el enlace podría ser como: 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); 

ACTUALIZACIÓN 4 de mayo de 2014

La respuesta anterior se conserva aquí: https://gist.github.com/stefek99/b10ed037d2a4a323d638


1) Instale 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) Ejecuta la aplicación: node app.js

3) Visita en el navegador: http://localhost:3000/endpoint?id=something

He recibido la ID: algo


(muchas cosas han cambiado desde mi respuesta y creo que vale la pena mantener las cosas al día)

Si está utilizando ES6 y Express , pruebe este enfoque:

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

Un pequeño servidor HTTP Node.js que escucha en el puerto 9080, analiza los datos GET o POST y los envía de vuelta al cliente como parte de la respuesta es:

 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); 

parse.js como parse.js y ejecútelo en la consola ingresando “node parse.js”.

Whitequark respondió amablemente. Pero con las versiones actuales de Node.js y Express.js requiere una línea más. Asegúrese de agregar el ‘require http’ (segunda línea). He publicado un ejemplo más completo aquí que muestra cómo funciona esta llamada. Una vez ejecutado, escriba http://localhost:8080/?name=abel&fruit=apple en su navegador, y obtendrá una buena respuesta basada en el código.

 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')); }) 

Es tan simple:

URL de ejemplo:

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

Puede imprimir todos los valores de la cadena de consulta utilizando:

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

Salida

Todas las cadenas de consulta: {“id”: “3”, “activar clave”: “$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK”}

Para imprimir específico:

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

Salida

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

Puedes usar

 request.query.; 

Puede usar con express ^ 4.15.4:

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

Espero que esto ayude.

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

Puedes usar esto o puedes probar body-parser para analizar elementos especiales desde los parámetros de solicitud.

puede usar el módulo url para recostackr parámetros usando url.parse

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

En expressjs está hecho por,

 var id = req.query.id; 

P.ej:

 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 }); 

Estoy usando MEANJS 0.6.0 con express@4.16, es bueno

Cliente:

Controlador:

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

servicios:

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

Servidor

rutas

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

controlador

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

En express.js puedes hacerlo bastante fácil, todo lo que necesitas hacer en tu función de controlador es:

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

Y eso es todo, suponiendo que estés usando syntax es6.

PD. {id} significa Destructuración de Object destructuring , una nueva característica de es6.

Puede usar req.params con ExpressJS

 router.get('/recipe/:id', function (req, res, next) { database.sendQuery("SELECT * FROM recipe WHERE id = " + req.params.id , function (err, results) { if (err) { console.log(err) } else { res.json(results) } }) });