it-swarm.com.de

Wie bekomme ich GET-Variablen (Abfragezeichenfolge) in Express.js auf Node.js?

Können die Variablen in der Abfragezeichenfolge in Node.js genauso abgerufen werden wie in $_GET in PHP?

Ich weiß, dass wir in Node.js die URL in der Anfrage erhalten können. Gibt es eine Methode zum Abrufen der Abfragezeichenfolgeparameter?

956
XMen

In Express ist dies bereits für Sie erledigt und Sie können einfach req.query dafür verwenden:

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

Ansonsten können Sie in NodeJS auf req.url und das eingebaute url-Modul auf [url.parse] ( Https://nodejs.org/api/url.html#url_urse_urse_url_parlstring_parsequerystring_slashesdenothost.) Zugreifen ) es manuell:

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

Da Sie Express.js in Ihren Tags erwähnt haben, finden Sie hier eine Express-spezifische Antwort: use req.query . Z.B.

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

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

app.listen(3000);
1572
whitequark

Verwenden Sie in Express req.query.

req.params ruft nur die Routenparameter ab, nicht die Parameter der Abfragezeichenfolge. Siehe die Express oder Segel Dokumentation:

(req.params) Prüft Routenparameter, zB:/user /: id

(req.query) Überprüft Abfragezeichenfolgenparameter, z. B .:? id = 12 Überprüft urlencodierte Textparameter

(req.body), ex: id = 12 Um urlencodierte Anforderungskörper zu verwenden, sollte req.body ein Objekt sein. Dies kann mithilfe der Middleware _express.bodyParser erfolgen.

In den meisten Fällen möchten Sie jedoch den Wert eines Parameters unabhängig von seiner Quelle abrufen. Verwenden Sie in diesem Fall req.param('foo').

Der Wert des Parameters wird zurückgegeben, unabhängig davon, ob sich die Variable in den Routenparametern, der Abfragezeichenfolge oder dem codierten Anforderungshauptteil befand.

Randbemerkung: Wenn Sie die Schnittmenge aller drei Arten von Anforderungsparametern ermitteln möchten (ähnlich wie in PHP $_REQUEST), müssen Sie nur die Parameter zusammenführen - hier ist, wie ich Setze es in Sails . Beachten Sie, dass das Pfad-/Routenparameter-Objekt (req.params) über Array-Eigenschaften verfügt, sodass die Reihenfolge wichtig ist (obwohl sich dies in Express 4 ändern kann ).

450
mikermcneil

Für Express.js möchten Sie req.params:

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

Ich habe aus den anderen Antworten gelernt und beschlossen, diesen Code auf meiner Website zu verwenden:

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

Dann kannst du einfach anrufen 

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

wo soll die URL liegen?

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

Sie sollten so etwas tun können:

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

Wenn Sie ES6 und Express verwenden, versuchen Sie diesen destructuring-Ansatz:

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

Im Zusammenhang: 

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

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

app.listen(3000);

Sie können auch mit destructuring Standardwerte verwenden:

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

Es gibt zwei Möglichkeiten, Parameter über die GET-Methode zu übergeben

Methode 1: Der MVC-Ansatz, bei dem Sie die Parameter wie/routename /: paramname übergeben
In diesem Fall können Sie req.params.paramname verwenden, um den Parameterwert abzurufen. Beispiel: Verweisen Sie auf den Code, für den ich Id als Parameter erwartet
link könnte wie folgt aussehen: 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);

Methode 2: Allgemeiner Ansatz: Übergeben von Variablen als Abfragezeichenfolge mit '?' Operator 
Für ein Beispiel verweise ich auf den Code, bei dem ich als Abfrageparameter Id erwartet
link könnte wie folgt aussehen: 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 

Alte Antwort hier erhalten: https://Gist.github.com/stefek99/b10ed037d2a4a323d638


1) Express installieren: 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) Führen Sie die App aus: node app.js

3) Besuch im Browser: http://localhost:3000/endpoint?id=something

Ich habe die ID erhalten: etwas


(Viele Dinge haben sich seit meiner Antwort geändert und ich glaube, es lohnt sich, die Dinge auf dem neuesten Stand zu halten)

23
Michal Stefanow

Ein kleiner Node.js-HTTP-Server, der Port 9080 überwacht, GET- oder POST -Daten analysiert und als Teil der Antwort an den Client zurücksendet.

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

Speichern Sie es als parse.js und führen Sie es auf der Konsole aus, indem Sie "node parse.js" eingeben.

18
adriano72

Whitequark antwortete gut. Bei den aktuellen Versionen von Node.js und Express.js ist jedoch eine weitere Zeile erforderlich. Vergewissern Sie sich, dass Sie 'http erforderlich' (zweite Zeile) hinzufügen. Ich habe hier ein ausführlicheres Beispiel veröffentlicht, das zeigt, wie dieser Anruf funktionieren kann. Geben Sie nach dem Start http://localhost:8080/?name=abel&fruit=Apple in Ihren Browser ein. Sie erhalten eine coole Antwort, die auf dem Code basiert.

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

Es ist so einfach:

Beispiel URL:

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

Sie können alle Werte der Abfragezeichenfolge drucken, indem Sie Folgendes verwenden:

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

Ausgabe

Alle Abfragezeichenfolgen: {"id": "3", "enablekey": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjz FUrqLrgS3zXJVfVRK"}

Um bestimmte zu drucken:

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

Ausgabe

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

13
Saran Pal

Sie können mit express ^ 4.15.4 verwenden:

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

Hoffe das hilft.

12
ajafik

Sie können verwenden

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

In express.js können Sie es ziemlich einfach bekommen. Alles was Sie in Ihrer Controller-Funktion tun müssen, ist

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

Und das ist alles, vorausgesetzt, Sie verwenden die Es6-Syntax.

PD. {id} steht für Object destructuring, eine neue es6-Funktion.

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

Sie können dies verwenden, oder Sie können den Body-Parser verwenden, um ein spezielles Element aus den Anforderungsparametern zu analysieren.

2
Mehedi Abdullah

sie können das URL-Modul verwenden, um Parameter mithilfe von url.parse zu erfassen 

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

In expressjs geschieht dies durch,

var id = req.query.id;

Z.B:

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 können wir einfach req.query.<name> verwenden. Es funktioniert genauso wie $_GET['name'] in PHP.

0
Ankit Singh

Aus meiner Sicht denke ich, dass viele Menschen zwei verschiedene Konzepte miteinander mischen. Während der Entwicklung von REST war ich mit der Übergabe von Informationen in der URL auf zwei Arten vertraut: "Pfadvariablen" und "Anforderungsparameter" (Abfrageparameter). Der RFC beschreibt die Teile der URI folgendermaßen: Geben Sie hier die Linkbeschreibung ein. Ich habe verstanden, dass der Autor gerne wissen möchte, wie Anforderungsparameter übergeben werden. Ich würde nur das Thema verständlicher machen wollen, aber die Lösung wurde hier oft erwähnt.

Sie können Abfrageparameter von der URI mit request.query.<name of the parameter> abrufen, die zweitgenannte Lösung war request.params.<name of the parameter> und mit dieser können Sie die Pfadvariablen abrufen.

0
Peter S.

Es ist eigentlich einfach:

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