Bagaimana cara mendapatkan parameter URL di Express?

290

Saya menghadapi masalah untuk mendapatkan nilai tagiddari URL saya: localhost:8888/p?tagid=1234.

Bantu saya untuk memperbaiki kode pengontrol saya. Saya tidak bisa mendapatkan tagidnilainya.

Kode saya adalah sebagai berikut:

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'
  });
};
pengguna2834795
sumber
13
Secara cepat,, /p?tagid=1234tagid disebut string kueri , bukan parameter URL. Parameter URL akan menjadi /p/:tagId.
mikemaccana

Jawaban:

704

Express 4.x

Untuk mendapatkan nilai parameter URL, gunakan 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

Jika Anda ingin mendapatkan parameter kueri ?tagId=5, gunakan 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

Ekspresikan 3.x

Parameter 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

Parameter kueri

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
sumber
Versi ekspres mana yang Anda gunakan? Saya baru saja menguji ini express-3.4.4dan berfungsi dengan baik.
maček
Ingatlah untuk menggunakan /p/5jika Anda menggunakan solusi teratas, atau /p?tagId=5jika Anda menggunakan solusi bawah.
maček
Solusi teratas (/ p / 5) berfungsi sempurna untuk saya..tetapi yang terbawah / p? TagId = 5 memberi saya kesalahan "tagId diatur ke tidak terdefinisi"
user2834795
2
Terima kasih banyak macek. Anda menghemat waktu saya. Itu adalah kesalahan saya, saya melakukan semua menurut Anda, tetapi di url saya menggunakan "tagid" daripada "tagId".
user2834795
11
req.param()sudah tidak digunakan lagi : Use either req.params, req.body or req.query, as applicable.Untuk rute "parameter" bernama (misalnya /p/:tagId) gunakan req.params. Untuk string kueri (misalnya /p?tagId=5) gunakan req.query.
Nateowami
20

Anda dapat melakukan sesuatu seperti req.param('tagId')

Tomah
sumber
1
Metode ini sudah usang. Gunakan req.query sebagai gantinya.
alextc
4
@alextc req.querydan req.paramsmerupakan hal yang sangat berbeda, pengganti req.param('x')adalah req.params.xtidak req.query.
Al-Mothafar
12

Jika Anda ingin mengambil nilai parameter kueri di URL, ikuti potongan kode di bawah ini

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

Jika Anda ingin mengambil parameter URL menggunakan fungsi param Express

Mengungkapkan fungsi param untuk mengambil parameter tertentu. Ini dianggap middleware dan akan berjalan sebelum rute dipanggil.

Ini dapat digunakan untuk validasi atau mengambil informasi penting tentang item.

Contoh untuk ini adalah:

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

Ini akan berfungsi jika rute Anda terlihat seperti ini: localhost:8888/p?tagid=1234

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

Kalau tidak, gunakan kode berikut jika rute Anda terlihat seperti ini: localhost:8888/p/1234

var tagId = req.params.tagid;
console.log(tagId); // outputs: 1234
console.log(req.params.tagid); // outputs: 1234
ajay saini
sumber
2
umumnya orang tidak membuat url seperti ini/p/:tagid=1234
Ankur Loriya