如何让路由 link 使用相同的文本?

How to get the route link work with same text?

不知道怎么问这个问题比较好,所以有了这个路线。我有 details/user_id 和 detail/id 但是当我对它们进行详细说明时......看起来它并不关心主要路线下方的路线。如何区分details/id和details/user_id?

const router = require('express').Router();
const db = require('../models');

// Get details by user_id
router.get('/details/:user_id', (req, res) => {
    try {
        db.Customer.findAll({
            where: {
                user_id: req.params.user_id,
            },
        }).then((user) => res.send(user));
    } catch (err) {
        res.status(500).json(err);
    }
});

// Get details by id
router.get('/detail/:id', (req, res) => {
    try {
        db.Customer.findAll({
            where: {
                id: req.params.id,
            },
        }).then((user) => res.send(user));
    } catch (err) {
        res.status(500).json(err);
    }
});

module.exports = router;

如果参数不相同/类型不同,您应该使用不同的路由

例如:

router.get('/details/users/:user_id', (req, res) => {
    try {
        db.Customer.findAll({
            where: {
                user_id: req.params.user_id,
            },
        }).then((user) => res.send(user));
    } catch (err) {
        res.status(500).json(err);
    }
});

我认为您想要的在某些方面无法实现。例如,如果您的数据库中有以下架构,

user_id : uuid

id: uuid

你看他们俩的图案一样吗?所以路由器会混淆并获得任何值的第一个功能。为什么不使用 Jimmy Soussan 建议的路线,使用这样的路线 /details/users/:id 对于用户和另一个 /details/rooms/:id.

但是如果你真的想实现类似的东西,我想你可以使用正则表达式来实现。如果您的 id 和 user_id 是不同的类型,那么您可以使用正则表达式来过滤它们。下面图像的文档 https://expressjs.com/en/guide/routing.html

因此,假设您继续尝试使用正则表达式,并且 user_id 是一个序列类型,而 id 是一个 uuid 类型。

uuid 正则表达式:[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a- fA-F0-9]{4}-[a-fA-F0-9]{12}

router.get('/details/users/:user_id(\[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\)', (req, res) => {
try {
    db.Customer.findAll({
        where: {
            user_id: req.params.user_id,
        },
    }).then((user) => res.send(user));
 } catch (err) {
    res.status(500).json(err);
 }
});

所以它只有在传递给 url 的值是一个 uuid 时才会起作用。这样您可以按其值进行过滤,但请记住,如果类型相等,那不是很有帮助,因为值将遵循相同的模式。您可以使用像 https://regex101.com/ 这样的在线网站来测试您对正则表达式的值。

对您的问题有用的内容:

https://expressjs.com/en/guide/routing.html

Searching for UUIDs in text with regex

https://regex101.com/

希望我的回答对您有所帮助,祝您好运。 :)