在express中发送Json文件

时间:2015-07-14 18:37:11

标签: json node.js express

我正在尝试在我的应用程序中设置路由,以便在打开时下载.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");
    }
});

为什么发送的文件完全为空?

1 个答案:

答案 0 :(得分:1)

您正在使用fs.writeFile功能,但不等待回调(这将表示错误或成功)请参阅:https://nodejs.org/api/fs.html#fs_fs_writefile_filename_data_options_callback

因此,在发送文件代码运行时,文件尚未写入,因此发送空白内容。

要解决此问题,请将res.setHeader中的所有内容放入函数的末尾,并将其添加为fs.writeFile的最后一个参数。