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?
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"]
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);
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)
Pour Exprimer.js vous voulez faire req.params
:
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
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
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")
})
//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"}
})
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);
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)
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)
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".
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'));
})
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
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.
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.
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.
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
});
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
...
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)
}
})
});