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'
  });
};
user2834795
la source
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
maček
la source
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')

tomahim
la source
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+ '!');
});
Malatesh Patil
la source
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
ajay saini
la source
2
généralement les gens ne font pas d'url comme ça/p/:tagid=1234
Ankur Loriya