Express'te bir URL parametresi nasıl alınır?


291

Ben değerini alma konusunda bir sorunla karşı karşıya am tagidmy URL'den: localhost:8888/p?tagid=1234.

Denetleyici kodumu düzeltmeme yardım et. tagidDeğeri alamıyorum .

Kodum aşağıdaki gibidir:

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
Ekspres olarak /p?tagid=1234, tagid'e URL parametresi değil, sorgu dizesi denir . Bir URL parametresi olurdu /p/:tagId.
mikemaccana

Yanıtlar:


707

Hızlı 4.x

Bir URL parametresinin değerini almak için req.params kullanın

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

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

Bir sorgu parametresi almak istiyorsanız ?tagId=5, req.query kullanın

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

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

Hızlı 3.x

URL parametresi

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

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

Sorgu parametresi

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

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

Hangi express sürümünü kullanıyorsunuz? Ben sadece üzerinde test express-3.4.4ve iyi çalışıyor.
maček

Kullanım unutmayın /p/5üst çözümü kullanarak veya eğer /p?tagId=5sen alt çözümü kullanıyorsanız.
maček

En iyi çözüm (/ p / 5) benim için mükemmel çalışıyor ... ama altta bir / p? TagId = 5 "
tagId

2
Teşekkürler macek.you zamandan tasarruf edin.Ben benim hatamdı, hepsini sana göre yaptım ama url'de "tagId" yerine "tagid" kullanıyordum.
user2834795

11
req.param()kullanımdan kaldırıldı : Use either req.params, req.body or req.query, as applicable.Adlandırılmış yol için "parametreler" (örn. /p/:tagId) kullanın req.params. Sorgu dizeleri için (ör. /p?tagId=5) Kullanın req.query.
Nateowami

20

Gibi bir şey yapabilirsin req.param('tagId')


1
Bu yöntem kullanımdan kaldırıldı. Bunun yerine req.query kullanın.
alextc

4
@alextc req.queryve req.paramsçok farklı şeyler için yedek req.param('x')olan req.params.xreq.query değil.
Al-Mothafar

12

URL'deki sorgu parametresi değerini almak istiyorsanız, aşağıdaki kod parçalarını izleyin

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

URL parametresini Express param işlevini kullanarak almak istiyorsanız

Belirli bir parametreyi almak için hızlı param işlevi. Bu ara katman yazılımı olarak kabul edilir ve rota çağrılmadan önce çalışır.

Bu, doğrulamalar için veya öğe hakkında önemli bilgileri almak için kullanılabilir.

Bunun bir örneği:

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

Rotanız şöyle görünüyorsa bu işe yarar: localhost:8888/p?tagid=1234

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

Aksi takdirde, rotanız şöyle görünüyorsa aşağıdaki kodu kullanın: localhost:8888/p/1234

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

2
genellikle insanlar böyle url /p/:tagid=1234
yapmaz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.