为什么Express.js路由select不正确的路由?

所以我有以下路线:

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

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

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

Express运行crud.deleteProjectfunction。

如果我将其注释掉或移动到其他路线下方,则按预期工作。

为什么是这样?

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

一个解决scheme是将定义切换到'/project/:id'之前定义的'/project/resource' '/project/:id'

一个解决scheme是添加另一个path层,例如'/project/res/resource'而不是'/project/resource'因为Express不会匹配'/:id'