最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

部署到ubuntu 18.04后未定义process.env

IT培训 admin 2浏览 0评论

部署到ubuntu 18.04后未定义process.env

我从win10 PC开发中将自己的nodejs 10.16.3应用程序部署到ubuntu 18.04。问题是在Ubuntu服务器上process.env变为undefineddotenv模块用作:

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变为undefineddotenv模块用作:

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源代码文件的目录的目录名称

发布评论

评论列表 (0)

  1. 暂无评论