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

Node.js中res.render回调内调用fs.readFile无响应、res.json不执行问题

问题修复方案

核心错误点

  • 代码中res.app.render调用结束后额外添加了(),尝试将render方法的返回值作为函数执行,而render本身不返回函数,会直接抛出类型错误,中断整个请求处理逻辑,自然不会执行后续的res.json
  • 未处理res.app.render可能抛出的渲染错误,一旦渲染出错会直接跳过回调逻辑,导致无响应
  • fs.readFile使用相对路径读取文件,若Node进程运行时工作目录与文件存放目录不一致,会触发读取错误,现有逻辑仅打印错误日志未返回响应,会导致请求挂起

修复后代码

const path = require('path');
// 提前引入path模块处理路径

app.get('/test', (req,res) => {
  res.app.render(data.template, {
    data: data
  }, function (err, html) {
    // 先处理render的错误
    if (err) {
      console.log('Render error:', err);
      return res.status(500).json('render failed');
    }
    data.html = html;
    // 用绝对路径读取文件避免路径错误
    fs.readFile(path.join(__dirname, 'credentials.json'), (err, content) => {
      if (err) {
        console.log('Error loading client secret file:', err);
        return res.status(500).json('load credentials failed');
      }
      res.json('works'); 
    });
  }); // 移除多余的()
});

验证逻辑

修复后可以按顺序验证:

  1. 调用渲染接口确认不会抛出服务器错误
  2. 检查渲染逻辑执行完成后是否正常进入回调
  3. 确认文件读取成功后res.json正常返回响应

内容的提问来源于stack exchange,提问作者Alejandro Jurado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:24:03