无法在heroku中读取已保存的文件

时间:2014-03-26 14:50:05

标签: node.js heroku

我在heroku上使用NodeJS。

我从另一台服务器读取文件并将其保存到/ temp目录中的应用程序中。 接下来,我读取同一个文件将其传递给我的客户端。

保存文件然后随后读取的代码是:

http.request(options, function (pdfResponse) {
    var filename = Math.random().toString(36).slice(2) + '.pdf',
        filepath = nodePath.join(process.cwd(),'temp/' + filename);

    pdfResponse.on('end', function () {
        fs.readFile(filepath, function (err, contents) {
            //Stuff to do after reading
        });
    });

    //Read the response and save it directly into a file
    pdfResponse.pipe(fs.createWriteStream(filepath));
});

这在我的本地主机上运行良好。

但是,当部署到heroku时,我收到以下错误:

events.js:72
throw er; // Unhandled 'error' event
Error: ENOENT, open '/app/temp/nvks0626yjf0qkt9.pdf'
Process exited with status 8
State changed from up to crashed

我正在使用process.cwd()来确保正确使用路径。但即便如此,它也无济于事。根据heroku文档,我可以自由地在应用程序目录中创建文件,我正在这样做。但是我无法弄清楚为什么没有读取文件......

1 个答案:

答案 0 :(得分:11)

您在此处描述的错误与/app/temp/不存在一致。您需要在开始编写之前创建它。这个想法是:

var fs = require("fs");
var path = require("path");
var temp_dir = path.join(process.cwd(), 'temp/');

if (!fs.existsSync(temp_dir))
    fs.mkdirSync(temp_dir);

我使用了同步版本的电话仅用于说明目的。此代码应该是应用程序启动代码的一部分(而不是为每个请求调用)以及如何构建它取决于您的特定应用程序。