it-swarm.dev

Come ottenere le variabili GET (query string) in Express.js su Node.js?

Possiamo ottenere le variabili nella stringa di query in Node.js proprio come li otteniamo in $_GET in PHP?

So che in Node.js possiamo ottenere l'URL nella richiesta. Esiste un metodo per ottenere i parametri della stringa di query?

956
XMen

In Express è già fatto per te e puoi semplicemente usare req.query per quello:

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

Altrimenti, in NodeJS, puoi accedere a req.url e al modulo url incorporato in [url.parse] ( https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost ) manualmente:

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

Poiché hai menzionato Express.js nei tuoi tag, ecco una risposta specifica per Express: usa req.query . Per esempio.

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

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

app.listen(3000);
1572
whitequark

In Express, usa req.query.

req.params ottiene solo i parametri del percorso, non i parametri della stringa di query. Vedere la documentazione di express o sails :

(req.params) Controlla i parametri del percorso, es:/user /: id 

(req.query) Controlla i parametri della stringa di query, es:? id = 12 Controlla i parametri del corpo urlencoded 

(req.body), ex: id = 12 Per utilizzare i corpi di richiesta urlencoded, req.body dovrebbe essere un oggetto. Questo può essere fatto usando il middleware _express.bodyParser.

Detto questo, il più delle volte, vuoi ottenere il valore di un parametro indipendentemente dalla sua origine. In tal caso, utilizzare req.param('foo').

Il valore del parametro verrà restituito indipendentemente dal fatto che la variabile si trovasse nei parametri del percorso, nella stringa di query o nel corpo della richiesta codificata.

Nota a margine: se stai cercando di ottenere l'intersezione di tutti e tre i tipi di parametri di richiesta (simile a PHP $_REQUEST), devi solo unire i parametri insieme-- ecco come lo impostarlo in Sails . Tieni presente che l'oggetto parametri percorso/percorso (req.params) ha proprietà di matrice, quindi l'ordine è importante (sebbene questo possa cambiare in Express 4 )

433
mikermcneil

Per Express.js si desidera eseguire req.params:

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

Ho imparato dalle altre risposte e ho deciso di utilizzare questo codice nel mio sito:

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

Quindi puoi semplicemente chiamare 

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

dove dovrebbe essere l'URL di get

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

Dovresti essere in grado di fare qualcosa del genere:

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

Se stai usando ES6 e Express , prova questo approccio destructuring:

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

Nel contesto: 

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

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

app.listen(3000);

Puoi usare anche i valori di default con 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

Esistono 2 modi per passare i parametri tramite il metodo GET

Metodo 1: L'approccio MVC in cui si passano i parametri come/routename /: paramname
In questo caso è possibile utilizzare req.params.paramname per ottenere il valore del parametro Per esempio fare riferimento al codice in cui mi aspetto Id come parametro
link potrebbe essere come: 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);

Metodo 2: Approccio generale: passare le variabili come stringa di query utilizzando '?' operatore 
Per esempio, fai riferimento al codice sottostante dove mi aspetto Id come parametro di query
link potrebbe essere come: 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

AGGIORNAMENTO 4 maggio 2014 

Vecchia risposta conservata qui: https://Gist.github.com/stefek99/b10ed037d2a4a323d638


1) Installa 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) Esegui l'app: node app.js

3) Visita nel browser: http://localhost:3000/endpoint?id=something

Ho ricevuto l'ID: qualcosa


(Molte cose sono cambiate dalla mia risposta e credo che valga la pena tenere aggiornate le cose)

23
Michal Stefanow

Un piccolo server HTTP Node.js in ascolto sulla porta 9080, che analizza i dati GET o POST e lo invia al client come parte della risposta è:

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

Salvalo come parse.js, ed eseguilo sulla console inserendo "node parse.js".

18
adriano72

Whitequark ha risposto bene. Ma con le versioni correnti di Node.js e Express.js richiede un'altra riga. Assicurati di aggiungere il 'require http' (seconda riga). Ho pubblicato un esempio più completo qui che mostra come questa chiamata può funzionare. Una volta eseguito, digita http://localhost:8080/?name=abel&fruit=Apple nel tuo browser e otterrai una risposta interessante basata sul codice.

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

È così semplice:

URL di esempio:

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

Puoi stampare tutti i valori della stringa di query usando:

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

Produzione

Tutte le stringhe di query: {"id": "3", "activatekey": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjz FUrqLrgS3zXJVfVRK"}

Per stampare specifici:

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

Produzione

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

13
Saran Pal

Puoi usare con express ^ 4.15.4:

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

Spero che questo ti aiuti.

12
ajafik

Puoi usare

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

In express.js puoi farlo abbastanza facilmente, tutto quello che devi fare nella funzione del tuo controller è:

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

E questo è tutto, supponendo che tu stia usando la sintassi es6.

PD. {id} sta per Object destructuring, una nuova funzione es6.

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

Puoi usare questo o puoi provare body parser per analizzare l'elemento speciale dai parametri della richiesta.

2
Mehedi Abdullah

puoi utilizzare il modulo url per raccogliere i parametri usando url.parse 

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

In expressjs è fatto da,

var id = req.query.id;

Per esempio:

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

In Express, possiamo semplicemente usare req.query.<name>. Funziona come quello di $_GET['name'] in PHP.

0
Ankit Singh

Dal mio punto di vista penso che molte persone mischino due concetti diversi. Durante lo sviluppo di REST ho avuto familiarità con il passaggio delle informazioni nell'URL con due modalità "variabili di percorso" e "parametri di richiesta" (parametri di query). La RFC descrive le parti dell'URI in questo modo: inserisci qui la descrizione del link Quindi ho capito che l'autore vorrebbe sapere come passare i parametri della richiesta. Vorrei solo rendere l'argomento più facile da capire, ma la soluzione è stata menzionata qui molte volte.

È possibile ottenere parametri di query dall'URI con request.query.<name of the parameter>, la seconda soluzione menzionata request.params.<name of the parameter> e con questa è possibile ottenere le variabili di percorso.

0
Peter S.