【问题标题】:Nested api endpoints in expressexpress 中的嵌套 api 端点
【发布时间】: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()。很抱歉造成混乱。

标签: javascript node.js express


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多