Node.js 无法打开节点服务器中的SSL密钥文件-eNONT
我正试图第一次使用grunt buildcontrol部署一个继承给heroku的项目。虽然我能够构建和部署,但在运行时我会遇到一个错误: eNote:没有这样的文件或目录,请打开“ssl/keys/server.key” 检查dist目录,实际上没有ssl目录。因此,我已将其添加到/dist,但没有任何效果。考虑到/dist/server/中的app.js可能是该目录的作用域,我将ssl目录复制到了那里——同样的问题。在/dist/server/app.js的内部:Node.js 无法打开节点服务器中的SSL密钥文件-eNONT,node.js,ssl,heroku,grunt-build-control,Node.js,Ssl,Heroku,Grunt Build Control,我正试图第一次使用grunt buildcontrol部署一个继承给heroku的项目。虽然我能够构建和部署,但在运行时我会遇到一个错误: eNote:没有这样的文件或目录,请打开“ssl/keys/server.key” 检查dist目录,实际上没有ssl目录。因此,我已将其添加到/dist,但没有任何效果。考虑到/dist/server/中的app.js可能是该目录的作用域,我将ssl目录复制到了那里——同样的问题。在/dist/server/app.js的内部: var options =
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
函数,在Heroku上是/app
,而不是dist文件夹。要以相对路径访问dist文件夹,应使用:
备选方案包括:
fs.readFileSync(\uu dirName+'/dist/ssl/keys/server.key')
fs.readFileSync(process.cwd()+'/dist/ssl/keys/server.key')
fs.readFileSync(path.join(\uu dirName,'dist','ssl','keys','server.key'))
path.resolve
是简洁和健壮的完美结合
考虑到/dist/server/中的app.js可能是该目录的作用域,我将ssl目录复制到了那里
当您在app.js
中登录\uuu dirname
时,您将获得/dist/server
您将ssl
目录存储在/dist/server
中
因此,您的key
路径是/dist/server/ssl/keys/server.key
,您的cert
路径是/dist/server/ssl/keys/server.crt
您的代码应该是:
var options = {
key: fs.readFileSync(__dirname + '/ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/ssl/keys/server.crt')
};
var options = {
key: fs.readFileSync(__dirname + '/../ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/../ssl/keys/server.crt')
};
如果将ssl
目录存储在/dist
中:
您的密钥
路径是/dist/ssl/keys/server.key
,您的证书
路径是/dist/ssl/keys/server.crt
现在,您的代码应该是:
var options = {
key: fs.readFileSync(__dirname + '/ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/ssl/keys/server.crt')
};
var options = {
key: fs.readFileSync(__dirname + '/../ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/../ssl/keys/server.crt')
};
我在我的一个项目上使用了相同的方法,它可以在不使用path.resolve
或path.join的情况下正常工作。即使是。/
父目录表示也由fs.readFileSync
本身解析。您可以使用“\uu dirname”变量访问应用程序的目录路径,如果您的dist文件夹旁边有app.js,其中有/ssl/密钥,则它将如下所示:
var options = {
key: fs.readFileSync(__dirname + '/dist/ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/dist/ssl/keys/server.crt')
};
// Setup server
var app = express();
var server = require('https').createServer(options, app);
readFileSync函数需要一个相对路径,因此您可以使用path模块获取键的相对路径
var path = require('path');
var options = {
key: fs.readFileSync(path.join(path.resolve('.'), '/ssl/keys/server.key')),
cert: fs.readFileSync(path.join(path.resolve('.'), '/ssl/keys/server.crt'))
};