我正在尝试在我的应用程序中设置路由,以便在打开时下载.json文件,但是我无法弄清楚res.sendFile的工作原理。当我发送文件时,由于某种原因,客户端会收到一个具有正确名称的完全空白的文件。
这是我的代码:
fs.writeFile(path.join(__dirname, '../../public/send/file.json'), JSON.stringify(resultDict));
res.setHeader('Content-disposition', 'attachment; filename=file.json');
var options = {
root: __dirname + '/../../public/send/',
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
};
res.sendFile('file.json', options, function(err){
if(err){
console.log(err);
res.status(err.status).end();
}
else{
console.log('Sent: ' + "file.json");
}
});
为什么发送的文件完全为空?
答案 0 :(得分:1)
您正在使用fs.writeFile
功能,但不等待回调(这将表示错误或成功)请参阅:https://nodejs.org/api/fs.html#fs_fs_writefile_filename_data_options_callback。
因此,在发送文件代码运行时,文件尚未写入,因此发送空白内容。
要解决此问题,请将res.setHeader
中的所有内容放入函数的末尾,并将其添加为fs.writeFile
的最后一个参数。