本文详解 node.js 中使用 contentful sdk 时因混用回调与 promise 导致接口挂起的问题,提供正确使用 `await` 调用 `getentries()` 的标准写法,并强调关键注意事项(如 `items` 属性访问、错误处理和响应结构)。
在 Node.js 后端集成 Contentful CMS 时,一个常见却隐蔽的错误是:错误地将基于 Promise 的 API(如 client.getEntries())与回调函数和 .catch() 混用。这正是你遇到 /api/courses 接口长时间 pending、浏览器转圈、控制台无报错的根本原因。
原始代码中,你声明了 async 函数,却仍以回调形式调用 getEntries():
client.getEntries({ /* options */ }, (err, courses) => { ... }).catch(...)
⚠️ 问题在于:contentful.js 的 getEntries() 返回 Promise,不接受回调参数。传入回调会被忽略,Promise 既未被 await 等待,也未被 .then() 或 .catch() 显式处理——导致函数提前结束,但异步请求仍在后台运行,Express 无法发送响应,于是连接悬而未决(Hanging Request)。
✅ 正确做法是完全采用 Promise + await 风格,并注意 Contentful 响应结构: