You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS调用Contentful接口无响应问题排查求助

问题排查:Contentful课程接口浏览器加载无响应

核心问题根源

你的代码存在两处关键错误,导致请求无法正常结束,浏览器持续等待响应:

  1. 回调与Promise混用:Contentful JS SDK的getEntries方法,当传入回调函数时不会返回Promise,因此后续的.catch()完全无效。如果请求过程中出现未被回调捕获的异常,或者回调逻辑存在问题,就会导致res始终未发送响应,请求挂起。
  2. 数据判断逻辑错误:Contentful返回的courses是集合对象而非数组,你用!courses.length判断空数据的逻辑不成立,应该检查courses.items.length;同时错误提示文本未修改,仍保留了movies接口的Movie not found,属于复制代码时的疏漏。

修复后的代码

getCourses = async (req, res) => {
  try {
    const client = contentful.createClient({
      space: '9f3v4l5x639t',
      accessToken: 'l83Wr4f12LlnCfo71Jv4NwSyt2x-M1Q0AQ22O5kRuEI'
    });

    const courses = await client.getEntries({
      content_type: 'course',
      locale: 'en-US',
      order: '-sys.createdAt',
      include: 2
    });

    if (!courses.items.length) {
      return res.status(404).json({ success: false, error: `Course not found` });
    }

    return res.status(200).json({ success: true, data: courses });
  } catch (err) {
    console.log(err);
    return res.status(400).json({ success: false, error: err });
  }
}

修复说明

  • 改用async/await语法,统一用try/catch处理所有异常,避免回调与Promise混用的混乱逻辑。
  • 修正空数据判断:针对Contentful返回的{ items: [...], ... }结构,用courses.items.length检查是否有数据。
  • 修正错误提示文本,匹配课程接口的业务场景。
  • 确保所有代码分支都有明确的res响应返回,彻底避免请求挂起的情况。

额外验证建议

  • 确认Contentful空间中存在en-US locale的课程数据,若没有则移除locale: 'en-US'参数重试。
  • 检查路由配置中的MovieCtrl.getCourses是否正确指向修复后的函数,排除导出或引用错误。

内容的提问来源于stack exchange,提问作者user2368975

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:05:10