我正在通过写一些随机的东西来练习node.js和express.js。因此,在编写带有参数的get方法后,它阻止了另一个get方法的运行。我想知道为什么。
我确信这是因为第一种方法。我删除它和之后的第二移动它,和它的工作就好了。但是,当它在第二之前的,它封锁。
// 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]);
});
我有两个其他的get方法与途径,例如“/”和“animes”。我相信,他们是不是这个原因,为什么它会阻止。
答案 0 :(得分:1)
中间件在它们被注册的顺序进行评价。
因此:
app.get("/animes/:id", ... )
app.get("/animes/add", ... )
Express将首先测试所请求的URL是否匹配/animes/:id
并且/animes/:id
是否匹配/animes/add
,将永远无法访问已注册app.get("/animes/add", ... )
的中间件。
答案 1 :(得分:1)
在第一个示例中,如果您调用“ animes / add”,则第一条路线“ / animes /:id”匹配。 “添加”将是在这种情况下,ID参数。所述谢胜利路线将被忽略。