为什么Express.js路由没有选择正确的路由?

时间:2017-09-17 12:15:46

标签: javascript node.js express

所以我有以下路线:

app.delete('/project/:id', crud.deleteProject);
app.delete('/project/resource/', crud.removeResourceFromProject);

当我使用网址http://mysite.no/project/resource/运行ajax调用时:

delete: function(url,data) {
return $.ajax({
  url: url,
  type: "DELETE",
  dataType: 'json',
  data: data
});

Express运行crud.deleteProject功能。

如果我注释掉或将其移到另一条路线下方,它会按预期工作。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

在Express中,路由定义的顺序很重要。它将执行第一个匹配的路线。正如Blex所述,'/:id'是一个通配符值,匹配'/resource'而不是跳过并遵循正确的路由定义。

解决方案是将定义切换为在'/project/resource'

之前定义'/project/:id'

解决方案是添加另一个路径图层,例如'/project/res/resource'而不是'/project/resource',因为Express不会将其与'/:id'匹配。