为什么快递匹配两条路线?
Why is express matching two routes?
我有一辆快车 API 有很多路线。
routes.get('/', perms('read', 'document'), r(CRUD.getAll))
routes.get('/search', perms('read', 'document'), r(CRUD.search))
routes.get('/:id', perms('read', 'document'), r(CRUD.getById))
我确保 /search
在 /:id
之上,但是,当一个新请求进入 /search
时,我看到两个端点都被点击了(我添加了一个 console.log
在每个函数中)。
我尝试翻转两者,在这种情况下,只有 /:id
成功了。
知道为什么会这样吗?
将 Express 路由视为具有匹配规则 (url) 的一组处理程序(中间件)。当一个请求进来时,路由器从头开始检查数组中的每一项。如果它匹配规则,那么处理程序是 运行(有些没有条件,所以它们只是在每个请求上 运行 :))。当匹配到单个 url 时,请求链 不会结束 !您可以对同一个请求执行多个处理程序(这正是中间件的工作方式)。
因此,这实际上取决于处理程序内部发生的情况。您可以告诉它继续列表中的下一项,并且 if 匹配 - 将执行下一个处理程序(如 /search
和 /:id
,将再次搜索)。
确保结束你的回复。如果您调用 next
并使用什么参数,请当心。 Post 处理程序的一些示例以便对其进行更多调试:)
我有一辆快车 API 有很多路线。
routes.get('/', perms('read', 'document'), r(CRUD.getAll))
routes.get('/search', perms('read', 'document'), r(CRUD.search))
routes.get('/:id', perms('read', 'document'), r(CRUD.getById))
我确保 /search
在 /:id
之上,但是,当一个新请求进入 /search
时,我看到两个端点都被点击了(我添加了一个 console.log
在每个函数中)。
我尝试翻转两者,在这种情况下,只有 /:id
成功了。
知道为什么会这样吗?
将 Express 路由视为具有匹配规则 (url) 的一组处理程序(中间件)。当一个请求进来时,路由器从头开始检查数组中的每一项。如果它匹配规则,那么处理程序是 运行(有些没有条件,所以它们只是在每个请求上 运行 :))。当匹配到单个 url 时,请求链 不会结束 !您可以对同一个请求执行多个处理程序(这正是中间件的工作方式)。
因此,这实际上取决于处理程序内部发生的情况。您可以告诉它继续列表中的下一项,并且 if 匹配 - 将执行下一个处理程序(如 /search
和 /:id
,将再次搜索)。
确保结束你的回复。如果您调用 next
并使用什么参数,请当心。 Post 处理程序的一些示例以便对其进行更多调试:)