部署到ubuntu 18.04后未定义process.env
我从win10 PC开发中将自己的nodejs 10.16.3应用程序部署到ubuntu 18.04。问题是在Ubuntu服务器上process.env
变为undefined
。 dotenv
模块用作:
require('dotenv').config({path: process.cwd() +'/config/.env'});
服务器正在监听:
const port = process.env.PORT; // 3000;
console.log(process.env);
server.listen(port, () => {
console.log(`env var: ${process.env.jwtPrivateKey}`)
console.log(`Listening on port ${port}...`);
});
.env
下有一个myproj\config\
文件,存储所有用户定义的参数。她是文件的一部分:
PORT = 3000
DB_PASSWORD = mydbpassword
jwtPrivateKey = myprivatekey
jwt_token_expire_days = 24
jwt_secret_len = 10
vcode_time_elapse = 10
用以下命令启动nodejs应用程序后:
pm2 start /ebs/www/myapp/index.js
这里是index-out.log
的打印输出:
$cat index-out.log
env var: undefined
Listening on port undefined...
这里是index-error.log
:
$ cat index-error.log
Unable to connect to the database: { SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:5433
at connection.connect.err (/ebs/www/emps/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:170:24)
at Connection.connectingErrorHandler (/ebs/www/emps/node_modules/pg/lib/client.js:174:14)
at Connection.emit (events.js:198:13)
at Socket.reportStreamError (/ebs/www/emps/node_modules/pg/lib/connection.js:72:10)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
name: 'SequelizeConnectionRefusedError',
parent:
{ Error: connect ECONNREFUSED 127.0.0.1:5433
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 5433 },
original:
{ Error: connect ECONNREFUSED 127.0.0.1:5433
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 5433 } }
必须与dotenv
模块的配置有关。
更改您的需求dotenv语句,从
require('dotenv').config({path: process.cwd() +'/config/.env'});
到
require('dotenv').config({path: __dirname +'/config/.env'});
由于使用下面的命令从其他位置启动了项目,因此无法读取.env文件:
pm2 start /ebs/www/myapp/index.js
process.cwd()与__dirname之间的区别:
[process.cwd()
返回当前工作目录,即您从中调用process.cwd()
命令的目录。
node
返回包含JavaScript源代码文件的目录的目录名称
部署到ubuntu 18.04后未定义process.env
我从win10 PC开发中将自己的nodejs 10.16.3应用程序部署到ubuntu 18.04。问题是在Ubuntu服务器上process.env
变为undefined
。 dotenv
模块用作:
require('dotenv').config({path: process.cwd() +'/config/.env'});
服务器正在监听:
const port = process.env.PORT; // 3000;
console.log(process.env);
server.listen(port, () => {
console.log(`env var: ${process.env.jwtPrivateKey}`)
console.log(`Listening on port ${port}...`);
});
.env
下有一个myproj\config\
文件,存储所有用户定义的参数。她是文件的一部分:
PORT = 3000
DB_PASSWORD = mydbpassword
jwtPrivateKey = myprivatekey
jwt_token_expire_days = 24
jwt_secret_len = 10
vcode_time_elapse = 10
用以下命令启动nodejs应用程序后:
pm2 start /ebs/www/myapp/index.js
这里是index-out.log
的打印输出:
$cat index-out.log
env var: undefined
Listening on port undefined...
这里是index-error.log
:
$ cat index-error.log
Unable to connect to the database: { SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:5433
at connection.connect.err (/ebs/www/emps/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:170:24)
at Connection.connectingErrorHandler (/ebs/www/emps/node_modules/pg/lib/client.js:174:14)
at Connection.emit (events.js:198:13)
at Socket.reportStreamError (/ebs/www/emps/node_modules/pg/lib/connection.js:72:10)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
name: 'SequelizeConnectionRefusedError',
parent:
{ Error: connect ECONNREFUSED 127.0.0.1:5433
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 5433 },
original:
{ Error: connect ECONNREFUSED 127.0.0.1:5433
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 5433 } }
必须与dotenv
模块的配置有关。
更改您的需求dotenv语句,从
require('dotenv').config({path: process.cwd() +'/config/.env'});
到
require('dotenv').config({path: __dirname +'/config/.env'});
由于使用下面的命令从其他位置启动了项目,因此无法读取.env文件:
pm2 start /ebs/www/myapp/index.js
process.cwd()与__dirname之间的区别:
[process.cwd()
返回当前工作目录,即您从中调用process.cwd()
命令的目录。
node
返回包含JavaScript源代码文件的目录的目录名称