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

请求/question接口返回[object Promise]而非预期值,求排查问题

问题分析与解决

你的问题核心出在异步函数的调用逻辑上:

getQuestion是用async声明的异步函数,直接调用它会返回一个Promise对象,而非你期望的Question实例。当你用模板字符串${question}把这个Promise转成字符串时,就会得到"[object Promise]",这就是客户端收到的内容。

修复步骤:

  1. 给questionController加上async关键字,将其转为异步函数
  2. 调用getQuestion时添加await,等待异步操作完成后拿到实际返回值
  3. (可选)增加错误捕获逻辑,避免未处理的异常导致服务崩溃

修改后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:45:01