Làm cách nào để có được tham số URL trong Express?


290

Tôi đang gặp vấn đề về việc nhận giá trị tagidtừ URL của mình : localhost:8888/p?tagid=1234.

Giúp tôi ra để sửa mã điều khiển của tôi. Tôi không thể có được tagidgiá trị.

Mã của tôi như sau:

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
Trong express, /p?tagid=1234tagid được gọi là chuỗi truy vấn , không phải là tham số URL. Một tham số URL sẽ là /p/:tagId.
mikemaccana

Câu trả lời:


704

Thể hiện 4.x

Để nhận giá trị của tham số URL, hãy sử dụng 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

Nếu bạn muốn nhận tham số truy vấn ?tagId=5, hãy sử dụng 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

Thể hiện 3.x

Tham số 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

Tham số truy vấ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

Phiên bản nào của express bạn đang sử dụng? Tôi chỉ thử nghiệm điều này express-3.4.4và nó hoạt động tốt.
maček

Nhớ sử dụng /p/5nếu bạn đang sử dụng giải pháp hàng đầu hoặc /p?tagId=5nếu bạn đang sử dụng giải pháp dưới cùng.
maček

Giải pháp hàng đầu (/ p / 5) hoạt động hoàn hảo đối với tôi..nhưng đáy một / p? TagId = 5 gây ra lỗi cho tôi "tagId được đặt thành không xác định"
user2834795

2
Cảm ơn rất nhiều macek. Bạn tiết kiệm thời gian của tôi. Đó là sai lầm của tôi, tôi đã làm tất cả theo bạn nhưng trong url tôi đã sử dụng "tagid" thay vì "tagId".
dùng2834795

11
req.param()đang bị phản đối : Use either req.params, req.body or req.query, as applicable.Đối với tên đường "thông số" (ví dụ /p/:tagId) sử dụng req.params. Đối với chuỗi truy vấn (ví dụ /p?tagId=5) sử dụng req.query.
Nateowami

20

Bạn có thể làm một cái gì đó như req.param('tagId')


1
Phương pháp này đã bị phản đối. Sử dụng req.query thay thế.
alextc

4
@alextc req.queryreq.paramslà những thứ rất khác nhau, sự thay thế không phải req.param('x')req.params.xreq.query.
Al-Mothafar

12

Nếu bạn muốn lấy giá trị tham số truy vấn trong URL, hãy làm theo các đoạn mã bên dưới

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

Nếu bạn muốn lấy tham số URL bằng hàm Express param

Thể hiện hàm param để lấy một tham số cụ thể. Đây được coi là phần mềm trung gian và sẽ chạy trước khi tuyến được gọi.

Điều này có thể được sử dụng để xác nhận hoặc lấy thông tin quan trọng về mặt hàng.

Một ví dụ cho điều này sẽ là:

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

Điều này sẽ hoạt động nếu tuyến đường của bạn trông như thế này: localhost:8888/p?tagid=1234

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

Nếu không, sử dụng mã sau nếu tuyến đường của bạn trông như thế này: localhost:8888/p/1234

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

2
nói chung mọi người không tạo url như thế này/p/:tagid=1234
Ankur Loriya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.