为什么带有参数的动词方法会阻塞另一个相同的路径?

时间:2019-02-02 19:27:40

标签: javascript node.js express

我正在通过写一些随机的东西来练习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”。我相信,他们是不是这个原因,为什么它会阻止。

2 个答案:

答案 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参数。所述谢胜利路线将被忽略。