Comment obtenir un paramètre d'URL dans Express?


291

Je suis confronté à un problème sur l' obtention de la valeur tagidde mon URL: localhost:8888/p?tagid=1234.

Aidez-moi à corriger mon code de contrôleur. Je ne parviens pas à obtenir la tagidvaleur.

Mon code est le suivant:

app.js:

var express = require('express'),
  http = require('http'),
  path = require('path');
var app = express();
var controller = require('./controller')({
  app: app
});

// all environments
app.configure(function() {
  app.set('port', process.env.PORT || 8888);
  app.use(express.json());
  app.use(express.urlencoded());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
  app.set('view engine', 'jade');
  app.set('views', __dirname + '/views');
  app.use(app.router);
  app.get('/', function(req, res) {
    res.render('index');
  });
});
http.createServer(app).listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));
});

Controller/index.js:

function controller(params) {
  var app = params.app;
  //var query_string = request.query.query_string;

  app.get('/p?tagId=/', function(request, response) {
    // userId is a parameter in the url request
    response.writeHead(200); // return 200 HTTP OK status
    response.end('You are looking for tagId' + request.route.query.tagId);
  });
}

module.exports = controller;

routes/index.js:

require('./controllers');
/*
 * GET home page.
 */

exports.index = function(req, res) {
  res.render('index', {
    title: 'Express'
  });
};

13
En express, /p?tagid=1234tagid est appelé une chaîne de requête , pas un paramètre d'URL. Un paramètre d'URL serait /p/:tagId.
mikemaccana

Réponses:


706

Express 4.x

Pour obtenir la valeur d'un paramètre d'URL, utilisez req.params

app.get('/p/:tagId', function(req, res) {
  res.send("tagId is set to " + req.params.tagId);
});

// GET /p/5
// tagId is set to 5

Si vous souhaitez obtenir un paramètre de requête ?tagId=5, utilisez req.query

app.get('/p', function(req, res) {
  res.send("tagId is set to " + req.query.tagId);
});

// GET /p?tagId=5
// tagId is set to 5

Express 3.x

Paramètre URL

app.get('/p/:tagId', function(req, res) {
  res.send("tagId is set to " + req.param("tagId"));
});

// GET /p/5
// tagId is set to 5

Paramètre de requête

app.get('/p', function(req, res) {
  res.send("tagId is set to " + req.query("tagId"));
});

// GET /p?tagId=5
// tagId is set to 5

Quelle version d'express utilisez-vous? Je viens de tester cela express-3.4.4et ça fonctionne bien.
maček

N'oubliez pas d'utiliser /p/5si vous utilisez la solution supérieure ou /p?tagId=5si vous utilisez la solution inférieure.
maček

La solution du haut (/ p / 5) me convient parfaitement ... mais celle du bas / p? TagId = 5 me donne l'erreur "tagId est défini sur indéfini"
user2834795

2
Merci beaucoup macek.vous économisez mon temps.C'est mon erreur, j'ai tout fait selon vous mais dans l'url j'utilisais "tagid" plutôt que "tagId".
user2834795

11
req.param()est obsolète : Use either req.params, req.body or req.query, as applicable.pour les "paramètres" de route nommés (par exemple /p/:tagId), utilisez req.params. Pour les chaînes de requête (par exemple /p?tagId=5), utilisez req.query.
Nateowami

20

Vous pouvez faire quelque chose comme req.param('tagId')


1
Cette méthode est obsolète. Utilisez plutôt req.query.
alextc

4
@alextc req.queryet req.paramsc'est tellement différent, le remplacement de req.param('x')n'est req.params.xpas req.query.
Al-Mothafar

12

Si vous souhaitez récupérer la valeur du paramètre de requête dans l'URL, suivez les éléments de code ci-dessous

//url.localhost:8888/p?tagid=1234
req.query.tagid
OR
req.param.tagid

Si vous souhaitez récupérer le paramètre URL à l'aide de la fonction Express param

Fonction param express pour saisir un paramètre spécifique. Ceci est considéré comme un middleware et s'exécutera avant l'appel de l'itinéraire.

Cela peut être utilisé pour des validations ou pour saisir des informations importantes sur l'article.

Un exemple serait:

// parameter middleware that will run before the next routes
app.param('tagid', function(req, res, next, tagid) {

// check if the tagid exists
// do some validations
// add something to the tagid
var modified = tagid+ '123';

// save name to the request
req.tagid= modified;

next();
});

// http://localhost:8080/api/tags/98
app.get('/api/tags/:tagid', function(req, res) {
// the tagid was found and is available in req.tagid
res.send('New tag id ' + req.tagid+ '!');
});

5

Cela fonctionnera si votre itinéraire ressemble à ceci: localhost:8888/p?tagid=1234

var tagId = req.query.tagid;
console.log(tagId); // outputs: 1234
console.log(req.query.tagid); // outputs: 1234

Sinon, utilisez le code suivant si votre itinéraire ressemble à ceci: localhost:8888/p/1234

var tagId = req.params.tagid;
console.log(tagId); // outputs: 1234
console.log(req.params.tagid); // outputs: 1234

2
généralement les gens ne font pas d'url comme ça/p/:tagid=1234
Ankur Loriya
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.