Process.env не определен после развертывания в Ubuntu 18.04 - PullRequest
1 голос
/ 07 октября 2019

Я развернул свое приложение nodejs 10.16.3 в Ubuntu 18.04 с моей разработки на компьютере win10. Проблема в том, что process.env становится undefined на сервере Ubuntu. Модуль 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}...`);

});

В myproj\config\ есть файл .env, в котором хранятся все пользовательские параметры,Это часть файла:

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.

1 Ответ

2 голосов
/ 07 октября 2019

Измените оператор require 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() возвращает текущий рабочий каталог, каталог, из которого вы вызвали node команда.

__dirname возвращает имя каталога, содержащего файл исходного кода JavaScript

...