请求/question接口返回[object Promise]而非预期值,求排查问题
问题分析与解决
你的问题核心出在异步函数的调用逻辑上:
getQuestion是用async声明的异步函数,直接调用它会返回一个Promise对象,而非你期望的Question实例。当你用模板字符串${question}把这个Promise转成字符串时,就会得到"[object Promise]",这就是客户端收到的内容。
修复步骤:
- 给
questionController加上async关键字,将其转为异步函数 - 调用
getQuestion时添加await,等待异步操作完成后拿到实际返回值 - (可选)增加错误捕获逻辑,避免未处理的异常导致服务崩溃
修改后的questionController代码如下:
exports.questionController = async function (req, res) { try { db = mongoUtils.getDb(); console.log(`db in question is ${db}`); console.log(`connected to database ${db.databaseName}`); // 用await等待异步函数执行完成,拿到实际的question对象 var question = await getQuestion(); console.log('question page'); // 用JSON.stringify序列化对象,避免直接转字符串的问题 var response = [{"message": JSON.stringify(question)}]; console.log(`returning response: ${JSON.stringify(response)}`) return res.json(response); } catch (err) { console.error('控制器执行出错:', err); return res.status(500).json([{"message": "服务器内部错误"}]); } }
额外补充:如果Question是Mongoose的模型实例,直接用模板字符串转换会丢失部分数据,用JSON.stringify()能正确序列化对象的所有属性。
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

