簡體   English   中英

快速路線參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM