NodeJS调用Contentful接口无响应问题排查求助
问题排查:Contentful课程接口浏览器加载无响应
核心问题根源
你的代码存在两处关键错误,导致请求无法正常结束,浏览器持续等待响应:
- 回调与Promise混用:Contentful JS SDK的
getEntries方法,当传入回调函数时不会返回Promise,因此后续的.catch()完全无效。如果请求过程中出现未被回调捕获的异常,或者回调逻辑存在问题,就会导致res始终未发送响应,请求挂起。 - 数据判断逻辑错误: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-USlocale的课程数据,若没有则移除locale: 'en-US'参数重试。 - 检查路由配置中的
MovieCtrl.getCourses是否正确指向修复后的函数,排除导出或引用错误。
内容的提问来源于stack exchange,提问作者user2368975
相关产品推荐
相关产品推荐

