由不正确的快速路由器处理的 API 请求



我们正在创建一个使用express framework的NodeJS应用程序。在使用路由器参数时,我们遇到了意外的行为。API 正在邮递员中进行测试,因为我们还没有准备好前端。有两个 API 定义如下

var router = express.Router();
router.get('/tif/:test2/:one', (req, res) => {
res.send("Test two");
});
router.get('/tif/test1/:one', (req, res) => {
res.send("Test one");
});
module.exports = router;

从邮递员那里,我们给出一个请求"http://localhost:3000/api/tif/test1/1",收到的响应是"测试二",其中它应该回答"测试一"。通过更改路由器的顺序,我能够获得预期的响应"测试一"。我们无法推理出这种行为。

按照路由在路由器上注册的顺序以及路由器在应用程序上的注册顺序检查路由是否与传入 URL 匹配。 在您的情况下,第一个路由查找与路由匹配并处理请求,并且路由不会继续到任何其他路由处理程序。

首先,我假设这个路由器被分配给/api,所以它可以看到所有以/api 开头的路由。 您没有显示该代码,但它似乎是您必须执行的操作。

因此,由于'/tif/:test2/:one''/tif/test1/:one'更通用,并且第一个将与您的URL匹配,/api/tif/test1/1,第二条路由永远不会有机会。

通过更改路由器的顺序,我能够获得预期的响应"测试一"。我们无法推理出这种行为。

当您将'/tif/test1/:one'放在第一位时,它会第一次获得/api/tif/test1/1机会,并且会与之匹配,因此您将获得所需的行为。

一般规则是:"如果您有多个可以匹配给定 URL 的路由,请将不太通用的路由放在更通用的路由之前,以便它们有机会匹配适合它们的 URL"。 如果不这样做,那么不太通用的路由将永远没有机会匹配,因为更一般的路由将首先匹配并在其他人有机会看到它们之前"处理"请求。

最新更新