express 中的嵌套 api 端点

Posted

技术标签:

【中文标题】express 中的嵌套 api 端点【英文标题】:Nested api endpoints in express 【发布时间】:2016-04-21 08:04:20 【问题描述】:

我正在使用 expressjs 开发一个 REST API。 我有两个 api 端点如下:

router.get('/probe/:id', function() );
router.get('/:id', function() );

现在,当我调用第一个端点时,也会调用第二个端点(id 为“probe”)。 如何确保只调用第一个? 我已经按照上面显示的顺序定义了它们。

编辑 我确实在我的条件中的else 之一中调用了next()。 现在,我有一个新的错误。 当我调用端点 /probe/ - 表示没有 id 时,只调用第二条路由,而永远不会调用第一条路由。 这是我的代码现在唯一一次失败。 我在这里错过了什么?

【问题讨论】:

你在第一个函数中做了什么?你是打电话给res.end(); 还是在某个地方有一个next(); 检查你的第一个路由中是否有next(),如果它在那里,next() 告诉 express 继续使用任何其他匹配的路由(这就是它会触发两条路由的原因)。有关更详细的说明,请参阅here。 我打电话给res.json(),它调用res.end(); 您是否在 webapp 中使用任何其他中间件? 我在导致上述行为的一种情况下打电话给next()。很抱歉造成混乱。 【参考方案1】:

建议您使用router.route 来定义您的路线,以避免重复的路线名称。您需要像这样重构代码:

router.route('/:id')
  .get(function() );

router.route('/probe/:id')
  .get(function() );

还建议您从 /api 端点提供 REST API。

app.use('/api', router);

【讨论】:

以上是关于express 中的嵌套 api 端点的主要内容,如果未能解决你的问题,请参考以下文章

Express中的PATCH路由/端点不起作用

节点 express REST API 中的 CORS 错误(PATCH 请求)

NodeJS/express - 公共 API 端点的安全性

如何在 Node/Express 应用程序中处理 api 版本

如何通过 REST API 在 Express Gateway 中使用多个路径和端点?

保护 Express API