使用 express 的节点 js 中的 URL 映射
Posted
技术标签:
【中文标题】使用 express 的节点 js 中的 URL 映射【英文标题】:URL mapping in node js with express 【发布时间】:2021-11-12 08:22:19 【问题描述】: router.get("customer/:customerId", async (request, response) =>
console.log("Fetch customer with a particular customer ID")
router.get("customer/regions", async (request, response) =>
console.log("Fetch all customers from a region")
但是每当我提出任何请求时,第一个 api(这些区域被视为 customerId)而不是第二个 api 正在处理请求。在这种情况下,我们如何进行 url 映射?
【问题讨论】:
尝试将customer/regions
路由按顺序放在首位?我不认为 Express 可以“知道”regions
不是有效的customerId
。
【参考方案1】:
您可以通过三种方式处理此问题。
一个是切换你两个router.get()
s的顺序。 Express 按顺序处理它们。按照你的方式,express 认为 regions
是一个 customerId。
另一种方法是将正则表达式附加到您的 :customerId route parameter。例如,如果您的 customerIds 是 12 位数字,您可以这样做以防止该路由处理除 customer/123456654321
样式 URL 之外的任何内容。
router.get("customer/:customerId(\d12)", async (request, response) =>
console.log("Fetch customer with a particular customer ID")
第三种是使用 next() 参数。它告诉 express 你的路由处理程序拒绝该 URL,并继续尝试其他匹配的路由。
router.get("customer/:customerId(\d12)", async (req, res, next) =>
if (<<it's an invalid customerId>>) return next()
console.log("Fetch customer with a particular customer ID")
您可能无论如何都应该使用 next() 来拒绝无效的 customerId,并且应该使用随机的难以猜测的 customerId 值。因为Panera Bread。
【讨论】:
以上是关于使用 express 的节点 js 中的 URL 映射的主要内容,如果未能解决你的问题,请参考以下文章