为啥 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