Javascript 为什么带参数的谓词方法会阻止同一路由的另一个?

Javascript 为什么带参数的谓词方法会阻止同一路由的另一个?,javascript,node.js,express,Javascript,Node.js,Express,我正在通过写一些随机的东西来练习node.js和express.js。所以在我编写了一个带有参数的get方法之后,它阻止了另一个get方法的运行。我想知道为什么 我确信这是因为第一种方法。我删除了它并在第二次之后移动了它,它工作得很好。但当它在2号之前时,它阻止了它 // the following code is the one that blocks app.get("/animes/:id", (req, res)=>{ res.send(animes[req.params.id])

我正在通过写一些随机的东西来练习node.js和express.js。所以在我编写了一个带有参数的get方法之后,它阻止了另一个get方法的运行。我想知道为什么

我确信这是因为第一种方法。我删除了它并在第二次之后移动了它,它工作得很好。但当它在2号之前时,它阻止了它

// the following code is the one that blocks
app.get("/animes/:id", (req, res)=>{
res.send(animes[req.params.id]);
});

app.get("/animes/add", (req, res)=>{
console.log(req.query);
res.send("yes")
}); 

// the following code works fine
app.get("/animes/add", (req, res)=>{
console.log(req.query);
res.send("yes")
});

app.get("/animes/:id", (req, res)=>{
res.send(animes[req.params.id]);
});

我还有另外两种获取路径的方法,比如“/”和“animes”。我确信它们不是it阻塞的原因。

中间件按照注册顺序进行评估

因此:

app.get("/animes/:id", ... )
app.get("/animes/add", ... )

Express将首先测试请求的url是否匹配
/animes/:id
,并且
/animes/:id
是否匹配
/animes/add
,将永远无法访问已注册到
app.get(“/animes/add”,…)
的中间件。

中间件将按照注册顺序进行评估

因此:

app.get("/animes/:id", ... )
app.get("/animes/add", ... )

Express将首先测试请求的url是否匹配
/animes/:id
,并且
/animes/:id
是否匹配
/animes/add
,如果调用“animes/add”,将永远无法访问注册到
app.get(“/animes/add“,…)
的中间件。

在第一个示例中,/animes/:id”匹配。在这种情况下,“add”将是id参数。secound路由将被忽略。

在第一个示例中,如果调用“animes/add”,则第一个路由“/animes/:id”匹配。在这种情况下,“add”将是id参数。第二条路线将被忽略