Können wir die Variablen in der Abfragezeichenfolge in Node.js genauso abrufen wie $_GET
in PHP?
Ich weiß, dass wir in Node.js die URL in der Anfrage erhalten können. Gibt es eine Methode, um die Parameter der Abfragezeichenfolge abzurufen?
Können wir die Variablen in der Abfragezeichenfolge in Node.js genauso abrufen wie $_GET
in PHP?
Ich weiß, dass wir in Node.js die URL in der Anfrage erhalten können. Gibt es eine Methode, um die Parameter der Abfragezeichenfolge abzurufen?
Antworten:
In Express ist es bereits für Sie erledigt und Sie können einfach req.query dafür verwenden:
var id = req.query.id; // $_GET["id"]
Andernfalls können Sie in NodeJS manuell auf req.url und das integrierte url
Modul zugreifen, um [url.parse] ( https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost ) manuell:
var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
req.query
req.query
oder req.param
(was anders ist als req.params
... siehe unten.
request
und hat nichts mit Express zu tun. Siehe @ Whitequarks Antwort unten (Verwendung request.query
)
Da Sie Express.js in Ihren Tags erwähnt haben, finden Sie hier eine Express-spezifische Antwort: Verwenden Sie 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);
req.query.id
die Klammer-Notation verwenden sollten.
Verwenden Sie in Express req.query
.
req.params
Ruft nur die Routenparameter ab, nicht die Parameter der Abfragezeichenfolge. Siehe die Express- oder Segeldokumentation :
(req.params) Überprüft die Routenparameter, z. B.: / user /: id
(req.query) Überprüft Abfragezeichenfolgenparameter, z. B.:? id = 12 Überprüft urlencodierte Körperparameter
(req.body), Beispiel: id = 12 Um urlencodierte Anforderungskörper zu verwenden, sollte req.body ein Objekt sein. Dies kann mithilfe der Middleware _express.bodyParser erfolgen.
Meistens möchten Sie jedoch den Wert eines Parameters unabhängig von seiner Quelle abrufen. In diesem Fall verwendenreq.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.
Randnotiz: Wenn Sie den Schnittpunkt aller drei Arten von Anforderungsparametern (ähnlich wie bei PHPs) ermitteln möchten $_REQUEST
, müssen Sie nur die Parameter zusammenführen. So habe ich sie in Sails eingerichtet . Beachten Sie, dass die Pfad- / Routenparameter object ( req.params
) Array-Eigenschaften haben, daher ist die Reihenfolge wichtig (obwohl sich dies in Express 4 ändern kann ).
req.params
den Sails-Dokumenten: sailsjs.org/#/documentation/reference/req/req.params.html und den neuen Express-Dokumenten: expressjs.com/4x/api.html#req.params
req.param()
wahrscheinlich in Express 5 vollständig entfernt. Dies wird erst einige Zeit später im Jahr 2017 unmittelbar bevorstehen, daher werde ich mit der Bearbeitung warten diese Antwort bis dahin. In der Zwischenzeit: Die Verwendung req.param()
mit Express <= 3.x / Sails <= 0.12 und mit der neuesten verfügbaren Version von Express 4 ist sicher , wenn auch mit einer Meldung über das Verfallsprotokoll. (Für Sails-Benutzer: Die Implementierung von req.param()
wird ab Sails v1.0 in den Kern verschoben und wird auch in Zukunft in Sails vollständig unterstützt.)
Für Express.js möchten Sie Folgendes tun req.params
:
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
Ich habe aus den anderen Antworten gelernt und mich entschieden, diesen Code auf meiner Website zu verwenden:
var query = require('url').parse(req.url,true).query;
Dann können Sie einfach anrufen
var id = query.id;
var option = query.option;
wo sollte die URL für get sein
/path/filename?id=123&option=456
parse
auf req.url
Konvertiten zu einem Objekt.
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 Standardwerte verwenden mit 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)
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 Ich erwarte, dass die ID als Parameter-
Link wie folgt lautet : 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
Zum Beispiel verweisen
wir auf den folgenden Code, in dem ich eine ID als Abfrageparameter- Link erwarte : 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);
Sie sollten in der Lage sein, so etwas zu tun:
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")
})
UPDATE 4. Mai 2014
Alte Antwort hier erhalten: https://gist.github.com/stefek99/b10ed037d2a4a323d638
1) Installieren Sie 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) Führen Sie die App aus: node app.js
3) Besuchen Sie im Browser: http://localhost:3000/endpoint?id=something
Ich habe den Ausweis 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 HTTP-Server von Node.js, der Port 9080 überwacht, GET- oder POST-Daten analysiert und als Teil der Antwort an den Client zurücksendet, lautet:
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 reagierte nett. Bei den aktuellen Versionen von Node.js und Express.js ist jedoch eine weitere Zeile erforderlich. Stellen Sie sicher, dass Sie das 'require http' (zweite Zeile) hinzufügen. Ich habe hier ein ausführlicheres Beispiel veröffentlicht, das zeigt, wie dieser Aufruf funktionieren kann. Geben Sie nach dem Ausführen http://localhost:8080/?name=abel&fruit=apple
Ihren Browser ein und Sie erhalten eine coole Antwort basierend auf dem 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'));
})
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", "enabledkey": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK"}
So drucken Sie spezifisch:
console.log("activatekey: " + req.query.activatekey);
Ausgabe
Aktivierungsschlüssel: $ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK
In express.js
Sie es recht einfach zu 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 Body-Parser ausprobieren, um spezielle Elemente aus den Anforderungsparametern zu analysieren.
Es ist eigentlich ganz 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
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 wird es gemacht von,
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 verwenden req.query.<name>
. Es funktioniert genauso wie $_GET['name']
in PHP.
Aus meiner Sicht denke ich, dass viele Menschen zwei verschiedene Konzepte mischen. Während der REST-Entwicklung war ich mit der Übergabe von Informationen in der URL auf zwei Arten vertraut: "Pfadvariablen" und "Anforderungsparameter" (Abfrageparameter). Der RFC beschreibt die Teile des URI folgendermaßen: Geben Sie hier die Linkbeschreibung ein Daher habe ich verstanden, dass der Autor wissen möchte, wie Anforderungsparameter übergeben werden. Ich möchte das Thema nur verständlicher machen, aber die Lösung wurde hier oft erwähnt.
Sie können Abfrageparameter vom URI mit abrufen request.query.<name of the parameter>
, die zweitgenannte Lösung war request.params.<name of the parameter>
und mit diesem können Sie die Pfadvariablen abrufen.
Es gibt also zwei Möglichkeiten, wie diese "ID" empfangen werden kann: 1) Verwenden von Parametern: Die Code-Parameter sehen ungefähr so aus: Angenommen, wir haben ein Array,
const courses = [{
id: 1,
name: 'Mathematics'
},
{
id: 2,
name: 'History'
}
];
Dann können wir für Parameter so etwas tun:
app.get('/api/posts/:id',(req,res)=>{
const course = courses.find(o=>o.id == (req.params.id))
res.send(course);
});
2) Eine andere Methode ist die Verwendung von Abfrageparametern. Die URL sieht also ungefähr so aus wie "..... \ api \ xyz? id = 1", wobei "? id = 1" der Abfrageteil ist. In diesem Fall können wir so etwas tun:
app.get('/api/posts',(req,res)=>{
const course = courses.find(o=>o.id == (req.query.id))
res.send(course);
});
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
Wenn Sie jemals eine GET
Anfrage an eine IP
oder eine senden müssen Domain
(andere Antworten haben nicht erwähnt, dass Sie eine port
Variable angeben können), können Sie diese Funktion verwenden:
function getCode(host, port, path, queryString) {
console.log("(" + host + ":" + port + path + ")" + "Running httpHelper.getCode()")
// Construct url and query string
const requestUrl = url.parse(url.format({
protocol: 'http',
hostname: host,
pathname: path,
port: port,
query: queryString
}));
console.log("(" + host + path + ")" + "Sending GET request")
// Send request
console.log(url.format(requestUrl))
http.get(url.format(requestUrl), (resp) => {
let data = '';
// A chunk of data has been received.
resp.on('data', (chunk) => {
console.log("GET chunk: " + chunk);
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log("GET end of response: " + data);
});
}).on("error", (err) => {
console.log("GET Error: " + err);
});
}
Verpassen Sie nicht, Module oben in Ihrer Datei zu benötigen:
http = require("http");
url = require('url')
Denken Sie auch daran, dass Sie das https
Modul für die Kommunikation über gesicherte Domänen und SSL verwenden können. Diese beiden Zeilen würden sich also ändern:
https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......
Ich benutze MEANJS 0.6.0 mit express@4.16, es ist gut
Klient:
Regler:
var input = { keyword: vm.keyword };
ProductAPi.getOrder(input)
Dienstleistungen:
this.getOrder = function (input) {return $http.get('/api/order', { params: input });};
Server
Routen
app.route('/api/order').get(products.order);
Regler
exports.order = function (req, res) {
var keyword = req.query.keyword
...
-------- Zugriff auf Abfragezeichenfolgendaten -------
Angenommen, dies ist der Link http://webapplog.com/search?term=node.js&page=1
Im Express können Sie also Folgendes verwenden:
req.query.term
req.query.page
oder req.query
(Die Abfrage wird in einem Objekt abgerufen.)
app.get('http://webapplog.com/search?term=node.js&page=1',(req, res)=>{
res.json({term:req.query.term, page:req.query.page})
})
-------- Zugriff auf URL-Parameter -------
Angenommen, dies ist der Link http://webapplog.com/node.js/pages/100.
In Express können Sie also Folgendes verwenden:
app.get('/:term/pages/:page',....)
req.params.term
req.params.page
app.get('http://webapplog.com/:term/pages/:page',(req, res)=>{
res.json({term:req.params.term, page:req.params.page})
})