为啥 Node fs.writeFile() 方法成功了,但是却给浏览器发送了一个空文件?

Posted

技术标签:

【中文标题】为啥 Node fs.writeFile() 方法成功了,但是却给浏览器发送了一个空文件?【英文标题】:Why is Node fs.writeFile() method successful, but an empty file is then sent to the browser?为什么 Node fs.writeFile() 方法成功了,但是却给浏览器发送了一个空文件? 【发布时间】:2016-03-16 02:52:30 【问题描述】:

以下回调函数会向浏览器发送一个空文件,即使该文件在服务器上包含“helloworld”:

router.get('/Download', function(req, res) 
    var fs = require('fs')
    fs.writeFile('helloworld.txt', 'helloworld');
    res.download('helloworld.txt');
)

【问题讨论】:

使用 Node.JS 编程是异步编程。如果你想获得最大的 Node.js,你应该使用它。 【参考方案1】:

writeFile 是异步的。 要么将其用作:

fs.writeFile('helloworld.txt', 'helloworld', function () 
    res.download('helloworld.txt');
);

或使用writeFileSync

https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback

【讨论】:

你能解释一下为什么异步方法不起作用吗? 长话短说writeFile 可能需要一段时间才能完成。 res.download 将在 writeFile 完成之前执行。在它执行的那一刻,文件是空的。这是由于 javascript (nodejs) 构造了事件循环。您可以在以下 2 个链接中阅读有关它的信息,我建议根据您如何更好地学习来寻找更多资源,例如youtube 视频、互动学习等nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/… & developer.mozilla.org/en-US/docs/Web/JavaScript/…【参考方案2】:

尝试找出您的代码是否有

process.exit()

出于某种原因。如果你这样做了,把这个注释掉,你会很高兴的。我的版本是v8.6.0。

另请参阅: node - fs.writeFile creates a blank file

【讨论】:

以上是关于为啥 Node fs.writeFile() 方法成功了,但是却给浏览器发送了一个空文件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥节点 10 强制在 fs.writeFile() 上传递回调?

Node.js - 文件系统 - 在 fs.writeFile() 中使用变量

[Node.js] Write or Append to a File in Node.js with fs.writeFile and fs.writeFileSync

node js fs模块

fs.writeFile 没有错误,但是写入文件失败

在 fs.writeFile([option]) 中,“选项参数”通常如何工作?