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?
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;
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);
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 ).
Für Express.js möchten Sie req.params
:
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
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
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")
})
//get query¶ms 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"}
})
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)
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);
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)
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.
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'));
})
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
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.
Sie können verwenden
request.query.<varible-name>;
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.
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.
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
});
In Express können wir einfach req.query.<name>
verwenden. Es funktioniert genauso wie $_GET['name']
in PHP.
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.
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