我正在尝试第一次使用 grunt buildcontrol 将我继承的项目部署到 heroku。虽然我能够构建和部署,但在运行时出现错误:
ENOENT: no such file or directory, open 'ssl/keys/server.key'
查看dist目录,确实没有ssl目录。因此,我将它添加到/dist 无济于事。考虑到/dist/server/内的 app.js 可能会被限定到该目录,我将 ssl 目录复制到了那里——同样的问题。/dist/server/app.js 内部:
var options = {
key: fs.readFileSync('ssl/keys/server.key'),
cert: fs.readFileSync('ssl/keys/server.crt')
};
// Setup server
var app = express();
var server = require('https').createServer(options, app);
如果 ssl 目录不在服务器文件夹中,它将在哪里查找?
最佳答案
readFileSync
函数evaluates relative paths to the current working directory Node 可执行文件,在 Heroku 上是 /app
,而不是 dist 文件夹。要将 dist 文件夹作为相对路径访问,您应该使用 path.resolve
:
var path = require('path');
var options = {
key: fs.readFileSync(path.resolve('dist/ssl/keys/server.key')),
cert: fs.readFileSync(path.resolve('dist/ssl/keys/server.crt'))
};
替代方案包括:
fs.readFileSync(__dirName + '/dist/ssl/keys/server.key')
fs.readFileSync(process.cwd() + '/dist/ssl/keys/server.key')
fs.readFileSync(path.join(__dirName, 'dist', 'ssl', 'keys', 'server.key'))
但我觉得 path.resolve
是简洁和健壮的完美结合。
关于node.js - 无法在 Node 服务器中打开 SSL key 文件 - ENOENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33133987/