จะรับพารามิเตอร์ URL ใน Express ได้อย่างไร


291

ฉันกำลังประสบปัญหาในการรับค่าtagidจาก URL ของฉัน:localhost:8888/p?tagid=1234ของฉัน:

ช่วยฉันออกเพื่อแก้ไขรหัสคอนโทรลเลอร์ของฉัน ฉันไม่สามารถรับtagidค่าได้

รหัสของฉันเป็นดังนี้:

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
โดยชัดแจ้ง/p?tagid=1234tagid เรียกว่าสตริงแบบสอบถามไม่ใช่พารามิเตอร์ URL พารามิเตอร์ URL /p/:tagIdที่จะเป็น
mikemaccana

คำตอบ:


706

ด่วน 4.x

ในการรับค่าพารามิเตอร์ URL ให้ใช้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

หากคุณต้องการได้รับพารามิเตอร์แบบสอบถาม?tagId=5ให้ใช้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

ด่วน 3.x

พารามิเตอร์ 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

พารามิเตอร์การสืบค้น

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 รุ่นไหน? ฉันเพิ่งทดสอบexpress-3.4.4และใช้งานได้ดี
maček

จำไว้ว่าให้ใช้/p/5ถ้าคุณใช้โซลูชันระดับสูงหรือ/p?tagId=5หากคุณใช้โซลูชันด้านล่าง
maček

วิธีการแก้ปัญหาด้านบน (/ p / 5) ทำงานได้สมบูรณ์แบบสำหรับฉัน .. แต่ด้านล่างหนึ่ง / p? tagId = 5 ให้ฉันข้อผิดพลาด "tagId ตั้งค่าไม่ได้กำหนด"
2834795

2
ขอบคุณมาก macek.you คุณประหยัดเวลาของฉันมันเป็นความผิดพลาดของฉันฉันทำทุกอย่างตามที่คุณ แต่ใน url ฉันใช้ "tagid" มากกว่า "tagId"
2834795

11
req.param()จะเลิกใช้ : Use either req.params, req.body or req.query, as applicable.สำหรับการตั้งชื่อเส้นทางพารามิเตอร์ "" (เช่น/p/:tagId) req.paramsการใช้งาน สำหรับสตริงแบบสอบถาม (เช่น/p?tagId=5) req.queryการใช้งาน
Nateowami

20

คุณสามารถทำสิ่งที่ชอบ req.param('tagId')


1
วิธีนี้เลิกใช้แล้ว ใช้ req.query แทน
alextc

4
@alextc req.queryและreq.paramsเป็นสิ่งที่แตกต่างกันดังนั้นแทนที่req.param('x')คือreq.params.xไม่ req.query
อัล Mothafar

12

หากคุณต้องการคว้าค่าพารามิเตอร์การสืบค้นใน URL ให้ทำตามโค้ดด้านล่าง

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

หากคุณต้องการคว้าพารามิเตอร์ URL โดยใช้ฟังก์ชั่นด่วนพารามิเตอร์

ฟังก์ชั่นเอ็กซ์เพรสพารามิเตอร์เพื่อคว้าพารามิเตอร์ที่เฉพาะเจาะจง สิ่งนี้ถือว่าเป็นมิดเดิลแวร์และจะทำงานก่อนที่จะเรียกเส้นทาง

สามารถใช้สำหรับการตรวจสอบความถูกต้องหรือข้อมูลสำคัญเกี่ยวกับรายการ

ตัวอย่างสำหรับสิ่งนี้จะเป็น:

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

วิธีนี้จะใช้ได้หากเส้นทางของคุณมีลักษณะดังนี้: localhost:8888/p?tagid=1234

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

มิฉะนั้นให้ใช้รหัสต่อไปนี้หากเส้นทางของคุณมีลักษณะดังนี้: localhost:8888/p/1234

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

2
โดยทั่วไปผู้คนไม่ได้ทำ URL แบบนี้/p/:tagid=1234
Ankur Loriya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.