web-dev-qa-db-fra.com

Comment obtenir des variables GET (chaîne de requête) dans Express.js sur Node.js?

Pouvons-nous obtenir les variables dans la chaîne de requête dans Node.js comme nous les obtenons dans $_GET en PHP?

Je sais que dans Node.js, nous pouvons obtenir l'URL dans la requête. Existe-t-il une méthode pour obtenir les paramètres de la chaîne de requête?

956
XMen

Dans Express, c'est déjà fait pour vous et vous pouvez simplement utiliser req.query pour cela:

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

Sinon, dans NodeJS, vous pouvez accéder à req.url et au module intégré url vers [url.parse] ( https://nodejs.org/api/url. html # url_url_parse_urlstring_parsequerystring_slashesdenotehost ) il manuellement:

var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
1022
Marcus Granström

Puisque vous avez mentionné Express.js dans vos balises, voici une réponse spécifique à Express: utilisez req.query . Par exemple.

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

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

app.listen(3000);
1572
whitequark

Dans Express, utilisez req.query.

req.params obtient uniquement les paramètres de route, pas les paramètres de chaîne de requête. Voir la documentation express ou sails :

(req.params) Vérifie les paramètres de route, ex:/user /: id 

(req.query) Vérifie les paramètres de la chaîne de requête, par exemple:? id = 12 Vérifie les paramètres du corps codés en url 

(req.body), ex: id = 12 Pour utiliser les corps de requête codés par url, req.body doit être un objet. Cela peut être fait en utilisant le middleware _express.bodyParser.

Cela dit, la plupart du temps, vous souhaitez obtenir la valeur d’un paramètre, quelle que soit sa source. Dans ce cas, utilisez req.param('foo').

La valeur du paramètre sera renvoyée, que la variable soit dans les paramètres de routage, dans la chaîne de requête ou dans le corps de la requête codée.

Remarque secondaire: si vous souhaitez obtenir l'intersection des trois types de paramètres de requête (similaire à $_REQUEST de PHP), il vous suffit de fusionner les paramètres ensemble. Voici comment je l'ai configuré dans Sails . N'oubliez pas que l'objet de paramètres path/route (req.params) a des propriétés de tableau. L'ordre est donc important (bien que ceci puisse changer dans Express 4 )

433
mikermcneil

Pour Express.js que vous voulez faire req.params:

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

J'ai appris des autres réponses et j'ai décidé d'utiliser ce code sur tout mon site:

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

Ensuite, vous pouvez simplement appeler 

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

où l'URL pour get devrait être

/path/filename?id=123&option=456
68
Grant Li

Vous devriez pouvoir faire quelque chose comme ça:

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

})
35
bigboss

Si vous utilisez ES6 et Express , essayez cette approche destructuring:

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

Dans le contexte: 

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

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

app.listen(3000);

Vous pouvez également utiliser les valeurs par défaut avec destructuring:

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

34
Steven Spungin

Il y a 2 façons de passer des paramètres via la méthode GET

Méthode 1: L'approche MVC où vous transmettez les paramètres tels que/routename /: paramname
Dans ce cas, vous pouvez utiliser req.params.paramname pour obtenir la valeur du paramètre.
link pourrait ressembler à: 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éthode 2: Approche générale: passer des variables sous forme de chaîne de requête à l'aide de '?' opérateur 
Par exemple, référez-vous au code ci-dessous où je m'attends à Id comme paramètre de requête.
link pourrait ressembler à: 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);
29
Omkar Bandkar

UPDATE 4 mai 2014 

Réponse ancienne conservée ici: https://Gist.github.com/stefek99/b10ed037d2a4a323d638


1) Installez 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) Lancer l'application: node app.js

3) Visitez le navigateur: http://localhost:3000/endpoint?id=something

J'ai reçu l'ID: quelque chose


(beaucoup de choses ont changé depuis ma réponse et je crois qu'il vaut la peine de les garder à jour))

23
Michal Stefanow

Un petit serveur HTTP Node.js écoutant le port 9080, analysant les données GET ou POST et les renvoyant au client dans le cadre de la réponse est le suivant:

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

Enregistrez-le sous le nom parse.js et exécutez-le sur la console en entrant "node parse.js".

18
adriano72

Whitequark a bien réagi. Mais avec les versions actuelles de Node.js et Express.js, il faut encore une ligne. Assurez-vous d’ajouter le 'require http' (deuxième ligne). J'ai posté un exemple plus complet ici qui montre comment cet appel peut fonctionner. Une fois lancé, tapez http://localhost:8080/?name=abel&fruit=Apple dans votre navigateur et vous obtiendrez une réponse positive en fonction du 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'));
})
18
james d'angelo

C'est si simple:

Exemple d'URL:

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

Vous pouvez imprimer toutes les valeurs de la chaîne de requête en utilisant:

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

Sortie

Toutes les chaînes de la requête: {"id": "3", "activatekey": "2 $ US $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjz FUrqLrgS3zXJVfVRK"}

Pour imprimer spécifique:

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

Sortie

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

13
Saran Pal

Vous pouvez utiliser avec express ^ 4.15.4:

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

J'espère que cela t'aides.

12
ajafik

Vous pouvez utiliser

request.query.<varible-name>;
11
Yash Bele

Dans express.js, vous pouvez obtenir cela assez facilement, tout ce que vous devez faire dans votre fonction de contrôleur est

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

Et c'est tout, si vous utilisez la syntaxe es6.

PD. {id} signifie Object destructuring, une nouvelle fonctionnalité es6.

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

Vous pouvez utiliser ceci ou vous pouvez essayer body-parser pour analyser un élément spécial à partir des paramètres de requête.

2
Mehedi Abdullah

vous pouvez utiliser le module url pour collecter des paramètres en utilisant url.parse 

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

Dans expressjs c'est fait par,

var id = req.query.id;

Par exemple:

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

Dans Express, nous pouvons simplement utiliser req.query.<name>. Cela fonctionne de la même façon que celui de $_GET['name'] en PHP.

0
Ankit Singh

De mon point de vue, je pense que beaucoup de gens mélangent deux concepts différents. Au cours du développement REST, je savais comment transmettre des informations dans l'URL avec deux méthodes "variables de chemin" et "paramètres de requête" (paramètres de requête). Le RFC décrit les parties de l'URI comme ceci: entrez la description du lien ici J'ai donc compris que l'auteur voudrait savoir comment passer les paramètres de la requête. Je voudrais seulement rendre le sujet plus facile à comprendre, mais la solution a été mentionnée ici à plusieurs reprises.

Vous pouvez obtenir les paramètres de requête à partir de l'URI avec request.query.<name of the parameter>. La deuxième solution mentionnée était request.params.<name of the parameter>. Elle permet également d'obtenir les variables de chemin d'accès.

0
Peter S.

C'est vraiment 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
0
Md. A. Barik