[英]Express route parameters
我是Node.js和Express的新手,我想知道以下代碼是否正確:
router.get('students/:name', async (req, res) => {
const students = await Student.find(req.params.name);
res.send(students);
});
router.get('students/:age', async (req, res) => {
const students = await Student.find(req.params.age);
res.send(students);
});
那么,Express如何找出只使用一個參數就使用哪一條路線呢? 例如,當我調用localhost:3000/students/20
,如果有些學生20歲,而有些學生的名字是“ 20”,該怎么辦?
您應該在這種情況下使用req.query。 像: /students?name=john&age=25
router.get('/students', async (req, res) => {
let query = req.query; // {name: 'john',age:25}
const students = await Student.find(query);
res.send(students);
});
您可以使用regex進行路由匹配 :
router.get('students/:age([0-9]+)', async (req, res) => {
const studentAge = parseInt(req.params.age, 10);
const students = await Student.find({age: studentAge});
res.send(students);
});
// Handle other strings
router.get('students/:name', async (req, res) => {
const students = await Student.find({name: req.params.name});
res.send(students);
});
據我所知,Express使用的是第一種與您的URL模式匹配的方法,而無需區分路由參數的類型。
這意味着,在您的代碼中,您將始終使用第一個,最頂層的方法。
為了能夠同時使用名稱和年齡過濾器,您將必須使用查詢參數或將字符串化的JSON傳遞給包含兩個過濾器的路由。 不過,前者會更優雅一些,從而減少URL的過載。 JSON往往會變大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.