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

Node Express问题:写入文件后res.render()无法正常渲染页面

解决使用async/await写入JSON后Express无法渲染模板的问题

问题背景

我写了一个结合async/await和Promise的Express接口,原本逻辑是先把JSON数据写入文件,再渲染Pug模板返回给前端。但遇到了诡异的情况:JSON文件能正常生成,控制台也没抛出任何错误,但浏览器就是无法连接服务器,页面完全无法渲染。有意思的是用res.send()替代res.render()就能正常工作,换了write-json-file模块也遇到一模一样的问题。我的代码如下:

const fse = require('fs-extra');
exports.testJSON = async (req, res) => {
  await fse.writeJson('./data/foo.json', {Key: '123'})
    .then(function(){ console.log('JSON updated.') })
    .catch(function(err){ console.error(err); });
  res.render('frontpage', { title: 'JSON Updated...', });
}

排查过程与最终结论

一开始我怀疑自己对Promise、磁盘写入或者Express的res.render()方法存在根本性理解误区,反复检查异步逻辑、模板路径和配置都没找到问题。直到后来才发现,问题根本和Express、JSON写入无关——是nodemon的自动重启机制在捣乱!

每次JSON文件写入保存后,nodemon检测到文件变更就会自动重启服务器,这直接打断了正在处理的请求流程,导致res.render()还没来得及把响应返回给前端,服务器就重启了,自然浏览器收不到任何响应,看起来像是连接失败。

解决办法

要解决这个问题,只需要配置nodemon忽略指定的数据文件或目录,让它不会因为JSON文件的变更而重启服务器。比如在项目根目录创建nodemon.json配置文件,添加如下内容:

{
  "ignore": ["data/*.json"]
}

这样nodemon就会忽略data目录下所有JSON文件的变更,服务器不会在写入数据时触发重启,请求流程就能正常走完,res.render()也能顺利返回渲染后的页面了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:13