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

使用res.send()返回数据前端报错,后台终端打印正常该如何解决?

问题原因
  • 异步执行逻辑错误:textract.fromFileWithPath 是异步回调型API,你当前把res.send写在调用该方法的代码后面,会在文件读取操作完成前就提前返回响应,此时你赋值的data不是读取到的文本内容,只是textract方法的内部返回值,并非前端需要的文本数据。
  • 变量重名冲突:MongoDB查询的回调参数已经命名为data,你后续又声明了同名的const data接收textract的返回值,会覆盖原有的查询结果,引发逻辑混乱。
  • 缺少错误处理逻辑:你没有对textract回调返回的error参数做处理,文件读取失败时前端不会收到任何错误提示,只会触发超时或无意义响应。
修复方案

调整异步逻辑顺序、修正变量名、补充错误处理即可,修复后代码如下:

router.get("/api/emailtemplates/data/:subject", (req, res) => {
  Email_templates.find({subject: req.params.subject}, (err, queryResult) => {
    if (err) {
      console.log(err);
      return res.status(500).send('数据库查询失败');
    }
    const val = queryResult[0]['template_file_link'];
    console.log(val);
    textract.fromFileWithPath(val, function( error, text ) {
      if (error) {
        console.log(error);
        return res.status(500).send('模板文件读取失败');
      }
      console.log("This dox data", text);
      res.send(text);
    });
  });
});

改动说明

  • 把Mongo查询的回调参数重命名为queryResult,避免变量重名覆盖
  • 将res.send移动到textract的回调函数内部,确保只有文件读取完成、拿到正确文本后才返回给前端
  • 新增数据库查询、文件读取两个环节的错误处理,出错时返回对应500状态码和提示信息,避免前端接口无响应抛错

内容的提问来源于stack exchange,提问作者Achyuta Nanta Panda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:15:03