使用 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 映射的主要内容,如果未能解决你的问题,请参考以下文章

express.js 服务器在正在使用的端口上启动

在express.js中间件请求中获取“#”之后的url

Express中的graphql错误,节点js

节点 JS 查询 request.query 为空

使用 Express 服务器将多个参数传递给 Next.js 自定义 URL

Nodejs 中的并发