我在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文档,我可以自由地在应用程序目录中创建文件,我正在这样做。但是我无法弄清楚为什么没有读取文件......
答案 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);
我使用了同步版本的电话仅用于说明目的。此代码应该是应用程序启动代码的一部分(而不是为每个请求调用)以及如何构建它取决于您的特定应用程序。