Come ottenere un parametro URL in Express?


290

Sto affrontando un problema su come ottenere il valore tagiddal mio URL: localhost:8888/p?tagid=1234.

Aiutami a correggere il mio codice controller. Non sono in grado di ottenere il tagidvalore.

Il mio codice è il seguente:

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
In express, /p?tagid=1234tagid è chiamato stringa di query , non parametro URL. Un parametro URL sarebbe /p/:tagId.
mikemaccana,

Risposte:


704

Express 4.x

Per ottenere il valore di un parametro URL, utilizzare 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

Se si desidera ottenere un parametro di query ?tagId=5, utilizzare 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

Parametro 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

Parametro di 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

Quale versione di Express stai usando? Ho appena provato questo express-3.4.4e funziona benissimo.
maček,

Ricorda di usare /p/5se stai usando la soluzione migliore o /p?tagId=5se stai usando la soluzione più bassa.
maček,

La soluzione migliore (/ p / 5) funziona perfettamente per me..ma in basso / p? TagId = 5 mi dà l'errore "tagId è impostato su non definito"
user2834795

2
Grazie mille macek. Mi hai risparmiato tempo. È stato un mio errore, ho fatto tutto secondo te ma in url stavo usando "tagid" anziché "tagId".
user2834795

11
req.param()è obsoleto : Use either req.params, req.body or req.query, as applicable.per la route denominata "parametri" (ad es. /p/:tagId) utilizzare req.params. Per stringhe di query (ad es. /p?tagId=5) Utilizzare req.query.
Nateowami,

20

Puoi fare qualcosa del genere req.param('tagId')


1
Questo metodo è stato deprecato. Utilizzare invece req.query.
alextc,

4
@alextc req.queryed req.paramsè così diverso, la sostituzione non req.param('x')è req.params.xreq.query.
Al-Mothafar,

12

Se si desidera acquisire il valore del parametro di query nell'URL, seguire le seguenti parti di codice

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

Se vuoi prendere il parametro URL usando la funzione Express param

Esprimere la funzione param per acquisire un parametro specifico. Questo è considerato middleware e verrà eseguito prima che venga chiamata la route.

Questo può essere utilizzato per convalide o per acquisire informazioni importanti sull'elemento.

Un esempio per questo sarebbe:

// 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

Funzionerà se il tuo percorso è simile al seguente: localhost:8888/p?tagid=1234

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

Altrimenti usa il seguente codice se il tuo percorso è simile al seguente: localhost:8888/p/1234

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

2
in genere le persone non fanno url in questo modo/p/:tagid=1234
Ankur Loriya il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.