如何让路由 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
希望我的回答对您有所帮助,祝您好运。 :)
不知道怎么问这个问题比较好,所以有了这个路线。我有 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
希望我的回答对您有所帮助,祝您好运。 :)