Comment obtenir des variables GET (query string) dans Express.js sur le nœud.js?

Pouvons-nous obtenir les variables dans la chaîne de requête dans le Nœud.js comme nous les obtenons dans {[0] } en PHP?

Je sais que dans le nœud.js nous pouvons obtenir L'URL dans la demande. Est-il une méthode pour obtenir les paramètres de chaîne de requête?

878
demandé sur Peter Mortensen 2011-08-02 17:08:31

20 réponses

Oui, vous pouvez accéder à req.url et le module intégré url à l'url .analyser manuellement:

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

Cependant, dans expressjs c'est déjà fait pour vous et vous pouvez simplement utiliser req.requête pour cela:

var id = req.query.id; // $_GET["id"]
800
répondu Marcus Granström 2018-04-29 04:10:40

Puisque vous avez mentionné Express.js dans vos tags, voici une réponse spécifique à Express: Utilisez req.requête . Par exemple

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

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

app.listen(3000);
1494
répondu whitequark 2015-04-30 11:24:07

Dans Express, utilisez req.query.

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

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

(req.query) vérifie les paramètres de chaîne de requête, ex:?id = 12 vérifie les paramètres du corps urlencoded

(req.body), ex: id = 12 pour utiliser les corps de requête urlencoded, req.le corps devrait être un objet. Cela peut être fait en utilisant le _express.bodyParser intergiciel.

Cela dit, la plupart du temps, vous voulez obtenir la valeur d'un paramètre, indépendamment de sa source. Dans ce cas, utilisez req.param('foo').

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

Side note-si vous visez à obtenir l'intersection des trois types de paramètres de requête (similaire à PHP $_REQUEST), il vous suffit de fusionner les paramètres ensemble-voici comment je mettez-le en Voiles . Gardez à l'esprit que l'objet Path / route parameters (req.params) a des propriétés de tableau, donc l'ordre compte (bien que puisse changer dans Express 4)

417
répondu mikermcneil 2017-11-10 03:28:19

Pour Exprimer.js vous voulez faire req.params:

app.get('/user/:id', function(req, res) {
  res.send('user' + req.params.id);    
});
114
répondu Cris-O 2015-05-04 12:03:11

J'ai appris des autres réponses et j'ai décidé d'utiliser ce code sur 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 de get doit être

/path/filename?id=123&option=456
68
répondu Grant Li 2015-05-04 12:05:12

Vous devriez être capable de faire quelque chose comme ceci:

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")
})
34
répondu RobertPitt 2014-08-29 18:20:32
//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"}

})
32
répondu bigboss 2017-02-15 02:37:11

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

Méthode 1 : L'approche MVC où vous passez les paramètres comme / routename/: paramname
Dans ce cas, vous pouvez utiliser req.params.paramname pour obtenir la valeur du paramètre par exemple, reportez-vous au code ci-dessous où j'attends Id en tant que param
le lien pourrait être comme: 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 en tant que chaîne de requête en utilisant '?"opérateur
Par exemple référez vous au dessous du code où j'attends Id en tant que paramètre de requête
le lien pourrait être comme: 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);
28
répondu Omkar Bandkar 2016-08-26 07:33:23

Mise à jour 4 mai 2014

Ancienne réponse conservée ici: https://gist.github.com/stefek99/b10ed037d2a4a323d638


1) Installer 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) Exécuter l'application: node app.js

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

J'ai reçu L'ID: something


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

23
répondu Michal Stefanow 2014-05-04 01:36:11

Si vous utilisez ES6 et Express, essayez ce déstructuration approche:

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 utiliser les valeurs par défaut avec destructuring aussi

// 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)
21
répondu Steven Spungin 2018-09-20 22:20:19

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

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 parse.js et exécutez-le sur la console en entrant " node parse.js".

18
répondu adriano72 2015-05-04 12:15:30

Whitequark a bien répondu. Mais avec les versions actuelles de Nœud.js et Express.js il nécessite une ligne. Assurez-vous d'ajouter l'exigent "http" (deuxième ligne). J'ai posté un exemple plus complet ici qui montre comment cet appel peut fonctionner. Une fois exécuté, tapez http://localhost:8080/?name=abel&fruit=apple dans votre navigateur, et vous obtiendrez une réponse cool basée sur le 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
répondu james d'angelo 2015-05-04 16:29:52

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 requête: {"id":"3","activatekey": "$2a$08$jvGevXUOvYxKsiBt.Mpi.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK"}

Pour imprimer spécifiques:

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

Sortie

Activatekey: $ 2a $ 08$jvGevXUOvYxKsiBt.Mpi.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK

13
répondu Saran Pal 2015-05-04 14:54:12

Vous pouvez utiliser

request.query.<varible-name>;
11
répondu Yash Bele 2017-05-07 08:22:07

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 aide.

11
répondu ajafik 2018-08-27 06:57:44
    app.get('/user/:id', function(req, res) {
      res.send('user' + req.params.id);    
    });

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

2
répondu Mehedi Abdullah 2018-07-31 18:41:02

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

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

Et c'est tout, en supposant que vous utilisez la syntaxe es6.

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

2
répondu Kevin Alemán 2018-08-18 23:24:28

Vous pouvez utiliser le module url pour collecter des paramètres à l'aide de l'url.analyser

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
répondu Codemaker 2018-07-05 04:27:27

J'utilise MEANJS 0.6.0 avec express@4.16, c'est bon

Client:

Contrôleur:

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

Services:

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

Serveur

Itinéraires

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

Contrôleur

exports.order = function (req, res) {
  var keyword = req.query.keyword
  ...
0
répondu TinhNQ 2018-07-10 06:02:37

Vous pouvez utiliser req.params avec 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)
            }
        })
    });
-3
répondu BrieucKyo 2018-06-11 14:34:44