【问题标题】:Why do I get a connection error although the call file is the same?为什么我得到一个连接错误,虽然调用文件是一样的?
【发布时间】:2017-12-26 21:41:32
【问题描述】:

我的问题如下,我正在运行一个我用 Node.js 编写的 WebSocket 服务器,并在主要使用 Laravel 构建的环境中运行。为了像 Laravel 一样使用 .env 文件,我使用了 dotenv 包。

我注意到我看起来很奇怪的东西。但在我解释之前,让我给你一个快速的 Laravel 典型的文件夹结构和我的节点添加:

htdocs
 - app
 - node  
     - RunServer.js
     - db.js
     ....  
 - resources  
 ....

我的观察

当我在 htdocs 文件夹中运行 node node/RunServer.js 时,我收到以下错误:

/var/www/html/bigriss/node/db.js:16
  if (err) throw err;
           ^

Error: connect ECONNREFUSED 127.0.1.1:3306 
.... 

虽然cd node; node RunServer.js 没有给出错误并且服务器开始按预期运行。 db.js 文件如下所示:

var mysql = require('mysql');
require('dotenv').config({path: '../.env'});

mysql.createConnection({
  host: process.env.DB_HOST,
  user: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT,
  database: process.env.DB_DATABASE
}).connect(function(err) {
  if (err) throw err;
});

很明显,这个问题与dotenv 有关,但我不确定为什么文件中的路径会发生变化(给我不同的 process.env 输出),即使 node node/RunServer.jscd node; node RunServer.js 运行完全相同的东西。有对此的解释吗?

【问题讨论】:

    标签: javascript node.js environment-variables


    【解决方案1】:

    似乎 dotenv.config({path:...}) 中指定的路径相对于当前工作目录 (cwd) 被解析。因此如果node运行在不同的目录,结果会有所不同。

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 2021-11-15
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多