【问题标题】:Environment variable undefined error in node.jsnode.js中的环境变量未定义错误
【发布时间】:2021-05-25 12:51:58
【问题描述】:

server.js


const express = require('express');

const dotenv = require('dotenv');


const error = require('./middleware/errorMiddlewareHandler');

const usersRoute = require('./routes/userRoute');

dotenv.config();

require('./config/dbConnect')();


const app = express();

const PORT = process.env.PORT || 3000;


//passing body data
app.use(express.json());

//user routes

//routes
app.use('/api/users', usersRoute);
console.log(process.env.JWT_KEY);




//error middleware
app.use(error.errorMiddlewareHandler);

app.listen(PORT, () => {
  console.log(`Server is listening on port ${PORT}`);
});

每当我运行代码时,终端都会显示

未定义

服务器正在监听 3000 端口

我已经正确分配了 JWT_KEY

JWT_KEY=stackoverflow

所以任何人都知道问题只是让我知道

【问题讨论】:

  • echo $JWT_KEY on bash 正在返回 stackoverflow?
  • 我猜该属性没有正确分配——你是如何具体分配它的?
  • 如何运行应用程序?

标签: javascript node.js reactjs mean-stack


【解决方案1】:

在文件顶部需要和配置 dotenv 需要(“dotenv”).config() 删除你已有的其他配置

【讨论】:

  • 为什么你认为这会解决问题? - 首先需要 env-module 然后调用它的 config()-func 完全没问题 -> 不需要一次性完成所有这些,因为有人可能需要在稍后阶段将额外的 args 传递给 config()(例如例如,从根不同的位置)..
【解决方案2】:

您可以通过以下方式检查config() 的结果(确保.env-文件在这种情况下位于根目录中):

require('dotenv').config()

const result = dotenv.config()

if (result.error) {
  throw result.error
}

console.log(result.parsed)

并查看它是否配置正确。 -> 在dotenv上查看更多信息

我个人更喜欢使用env_config.js 文件来处理我的环境并在需要时需要它(即app.js)。

env_config.js:

var path = require('path');


const dotenvAbsolutePath = path.join(__dirname, '.env');

/* INFO: Require dotenv package for retieving and setting env-vars at runtime via absoliute path due to pkg */

  const dotenv = require('dotenv').config({
    path: dotenvAbsolutePath
  });
  if (dotenv.error) {
    console.log(`ERROR WHILE READING ENV-VARS:${dotenv.error}`);
    throw dotenv.error;
  }

module.exports = {
  nodeEnv: process.env.NODE_ENV,
  nodePort: process.env.NODE_PORT,
  deviceLocation: process.env.DEVICE_LOCATION,
  hostWLC: process.env.HOST_WLC,
  hostPostgresql: process.env.HOST_POSTGRESQL,
  portPostgresql: process.env.PORT_POSTGRESQL,
  dbPostgresql: process.env.DB_POSTGRESQL,
  userPostgresql: process.env.USER_POSTGRESQL,
  pwdPostgresql: process.env.PWD_POSTGRESQL,
  hostMQTT: process.env.HOST_MQTT,
  portMQTT: process.env.PORT_MQTT,
  userMQTT: process.env.USER_MQTT,
  pwdMQTT: process.env.PWD_MQTT,
};

app.js:

const { nodePort } = require('./env-config');
....
...
..
app.listen(nodePort, () => console.log(`Node's Express someApp is listening on Port ${nodePort}..`));

.env 文件(在根目录中):

NODE_ENV=******
NODE_PORT=******
DEVICE_LOCATION=******
HOST_WLC=******
HOST_POSTGRESQL=******
PORT_POSTGRESQL=******
DB_POSTGRESQL=******
USER_POSTGRESQL=******
PWD_POSTGRESQL=******
HOST_MQTT=******
PORT_MQTT=******
USER_MQTT=******
PWD_MQTT=******

正常使用根据官方文档:

尽早在您的应用程序中要求并配置 dotenv。

require('dotenv').config()

在项目的根目录中创建一个 .env 文件。以 NAME=VALUE 的形式在新行中添加特定于环境的变量。例如:

DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3

process.env 现在拥有您在 .env 文件中定义的键和值。

const db = require('db')
db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
})

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2020-03-27
    • 2022-09-27
    • 2020-12-14
    • 2022-06-18
    • 2021-09-13
    • 2020-08-09
    • 2021-08-15
    相关资源
    最近更新 更多