node.js - 无法在 Node 服务器中打开 SSL key 文件 - ENOENT

标签 node.js ssl heroku grunt-build-control

我正在尝试第一次使用 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/

相关文章:

java - 设置默认的 SocketFactory

ruby-on-rails - 使用 godaddy 在 heroku 上添加 SSL 证书

django - Django 应用程序的 Heroku 推送获取 "No module named psycopg2.extensions"

node.js - 使用 Node/Express 将转换为图像的 HTML5 Canvas 上传到 Azure

javascript - nodejs return callback() 和 just callback() 有什么区别

Node.js + Express.js + Passport.js - 我需要一些如何构建它们的建议

ssl - 什么是 Docker registry 2.0 tls clientcas

ruby-on-rails - Heroku Migrate 数据库更改

python - Heroku Scheduler 在运行工作应用程序时延迟几秒钟?

javascript - NodeJs : How can I see the log of a NodeJs server running by PM2 in a EC2 instance