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 REST API 中的 CORS 错误(PATCH 请求)
NodeJS/express - 公共 API 端点的安全性
如何在 Node/Express 应用程序中处理 api 版本