Javascript NodeJs快速路由器错误

Javascript NodeJs快速路由器错误,javascript,node.js,express,Javascript,Node.js,Express,我重新编写这个,因为我已经知道了问题是什么,但我无法理解它是如何发生的或如何解决它 基本上,在我所有的路线中,我都要去添加删除路线的地方。第一点如下 app.route('/bi/clubs/:id') .post(authentication,clubController.getAll) .delete(authentication,clubController.deleteClub); 第二个位置是 app.route('/bi/clubs/members')

我重新编写这个,因为我已经知道了问题是什么,但我无法理解它是如何发生的或如何解决它

基本上,在我所有的路线中,我都要去添加删除路线的地方。第一点如下

 app.route('/bi/clubs/:id')
    .post(authentication,clubController.getAll)
    .delete(authentication,clubController.deleteClub);
第二个位置是

 app.route('/bi/clubs/members')
    .post(authentication,memController.getAll)
    .delete(authentication,memController.deleteMember);
每当我在“/bi/clubs/members”上调用DELETE时,express实际上会将其路由到“/bi/clubs/:id”。事实上,我已经经历并追踪到这一切正在发生

我可以验证我没有在应用程序中的任何其他位置添加路线,如果我在“/bi/clubs/id”上注释掉删除路线,则第二条删除路线将正确路由。如果我不对此进行注释,则删除“/bi/clubs/members”的调用将路由到“/bi/clubs/:id”

我设置路线的顺序如上所述


任何帮助都将不胜感激。

快车将匹配您的路线
/bi/clubs/members
作为
/bi/clubs/:id
。当向Express应用程序发出请求时,您的应用程序将从路由和中间件的顶部开始,一直运行到最后,并命中所有匹配的路由

当您告诉Express匹配路线
/bi/clubs/:id
时,您所说的就是匹配
bi
,然后是
clubs
,然后是一个动态值,您称之为
id
。虽然您可能希望
id
是一个数字或MongoDB id,但Express不知道区别,因此从技术上讲,字符串
members
作为一个动态值匹配。只是不是你想要的

如果您
console.log
id
的值应为
members
。静态路由需要在动态路由之前注册


如果您有任何问题或想要一个示例,请告诉我。

那么服务器抛出的实际错误是什么?你没有提供太多的细节…这就是问题所在。我的日志文件中甚至没有任何错误。我从邮递员那里测试,刚刚得到内部服务器错误。有趣的是,如果我将delete方法的路由更改为其他任何方法,那么它将工作。您确实需要提供更多信息(什么是
身份验证
getAll
工作吗?您是否运行了Express in?)。身份验证是一个用户身份验证部分,它可以工作。GetAll工作。事实上,有趣的是,如果我将上面的代码分解,使DELETE按如下方式运行:app.route('/bi/participants/DELETE).DELETE(authentication,partController.deleteParticipant),那么它可以正常工作。整个问题是两个http方法都在一条路由上,尽管正如我之前提到的,这条路由以前工作得很好。我是在调试模式下运行的,当它需要调用控制器来删除时,它就会中断。有什么建议吗?有人吗?麦克斯,非常感谢,这很有道理。但我仍然不知道如何在不改变路径的情况下绕过这个问题。你能举个例子吗。或者让我知道,如果你需要任何关于我的代码的进一步信息。我使用的是MEANJS结构,它正在添加我的所有路由。我不确定是按哪个顺序添加的,我在不同的文件中有这两条路由。@John,你如何调用这些路由文件?我假设使用
require()
。您只需确保,无论您在哪里调用或加载文件,都首先是带有
/bi/clubs/members
的文件。如果这不合理,请告诉我,我将提供一个明确的例子。您可以测试@Johns理论,在路由中使用正则表达式。@AfDev,这似乎没有必要,因为Express已经在进行匹配。他只需要正确地安排路线。麦克斯,很抱歉没有早点回复。但你完全正确。非常感谢你!