Wie erhalte ich einen URL-Parameter in Express?

290

Ich habe ein Problem beim Abrufen des Werts tagidvon meiner URL : localhost:8888/p?tagid=1234.

Helfen Sie mir, meinen Controller-Code zu korrigieren. Ich kann den tagidWert nicht bekommen .

Mein Code lautet wie folgt:

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
quelle
13
In Express, /p?tagid=1234wird MarkierungslD einen gerufene Query - String , keine URL - Parameter. Ein URL-Parameter wäre /p/:tagId.
Mikemaccana

Antworten:

704

Express 4.x.

Verwenden Sie req.params , um den Wert eines URL-Parameters abzurufen

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

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

Wenn Sie einen Abfrageparameter erhalten möchten ?tagId=5, verwenden Sie 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.

URL-Parameter

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

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

Parameter abfragen

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
quelle
Welche Express-Version verwenden Sie? Ich habe das gerade getestet express-3.4.4und es funktioniert gut.
Maček
Denken /p/5Sie daran, zu verwenden, wenn Sie die obere Lösung verwenden oder /p?tagId=5wenn Sie die untere Lösung verwenden.
Maček
Die obere Lösung (/ p / 5) funktioniert perfekt für mich ... aber die untere / p? TagId = 5 gibt mir den Fehler "tagId ist auf undefiniert gesetzt"
user2834795
2
Vielen Dank macek. Sie sparen meine Zeit. Es war mein Fehler, ich habe alles nach Ihren Wünschen gemacht, aber in der URL habe ich "tagid" anstelle von "tagId" verwendet.
user2834795
11
req.param()ist veraltet : Use either req.params, req.body or req.query, as applicable.Für benannte Route "Parameter" (zB /p/:tagId) verwenden req.params. Für Abfragezeichenfolgen (zB /p?tagId=5) verwenden req.query.
Nateowami
20

Sie können so etwas tun req.param('tagId')

Tomahim
quelle
1
Diese Methode ist veraltet. Verwenden Sie stattdessen req.query.
Alextc
4
@alextc req.queryund req.paramsist so verschiedene Dinge, der Ersatz für req.param('x')ist req.params.xnicht req.query.
Al-Mothafar
12

Wenn Sie den Abfrageparameterwert in der URL abrufen möchten, befolgen Sie die folgenden Codeteile

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

Wenn Sie den URL-Parameter mit der Express-Parameterfunktion abrufen möchten

Drücken Sie die Parameterfunktion aus, um einen bestimmten Parameter abzurufen. Dies wird als Middleware betrachtet und ausgeführt, bevor die Route aufgerufen wird.

Dies kann für Validierungen oder zum Abrufen wichtiger Informationen zu Elementen verwendet werden.

Ein Beispiel hierfür wäre:

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

Dies funktioniert, wenn Ihre Route folgendermaßen aussieht: localhost:8888/p?tagid=1234

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

Verwenden Sie andernfalls den folgenden Code, wenn Ihre Route so aussieht: localhost:8888/p/1234

var tagId = req.params.tagid;
console.log(tagId); // outputs: 1234
console.log(req.params.tagid); // outputs: 1234
Ajay Saini
quelle
2
Im Allgemeinen machen die Leute keine URL wie diese/p/:tagid=1234
Ankur Loriya