NodeJS 无法识别 .env 文件
NodeJS not recognizing .env file
我有 5 个 NodeJS 服务 运行ning,但其中一个有问题。
这是 nodemon.json
文件:
{
"watch": ["**/*.ts"],
"ext": "ts,json",
"ignore": ["./test/*.ts"],
"exec": "node -r ts-node/register -r dotenv/config Index.ts dotenv_config_path=$(pwd)/.env",
"env": {
"NODE_ENV": "development"
}
}
与其他服务一样。当我 运行 npm run dev
时,我收到错误消息,具体取决于从 .env 文件中获取的值,例如:
const LOCAL_CONFIGURATION = {
PORT_APP: 8082,
MONGODB: {
SERVER: process.env.MONGO_DTE,
AUTH: {
auth: {
password:process.env.MONGO_PASSWORD,
user:process.env.MONGO_USER
}
},
},
MS_NOTIFICACION: "http://localhost:8089/notificacion",
ELASTIC_PATH: process.env.ELASTIC_PATH,
...COMMON,
};
第一条错误信息是:
ConfigurationError: Missing node(s) option
产生该消息是因为它没有从 process.env.ELASTIC_PATH
读取值,但是如果我输入一个像“http://with.the.correct.url”这样的硬编码值,它再次尝试读取 运行,我会得到另一个错误:
Error: Credentials must be provided when creating a service client
该错误是因为它试图读取 password:process.env.MONGO_PASSWORD
和 user:process.env.MONGO_USER
等,因此,读取.env
文件时出现问题。我知道 .env
文件具有这些值,并且该文件是 UTF-8 格式,没有引号等。.env
文件与其他服务是同一个文件,它在其余部分工作正常但是我不知道为什么这里没有人阅读。
有什么想法吗?
编辑:
另外,我在 config.ts
文件中放入了一个 console.log(process.env);
,它显示的值如下:
但是 .env
中没有值,例如,图片中有一个名为 COMPUTERNAME
的值,所以如果我输入 console.log(process.env.COMPUTERNAME);
,我会得到:IBM-NOT87
为什么没有获取 .env 文件?
看来您需要 require/configure dotenv
。 Docs:
As early as possible in your application, require and configure dotenv.
require('dotenv').config()
进一步扩展@JBallin 的回答
您应该在 app.js
上使用它
- 或者,如果这不起作用,那么您需要将其显式添加到您要使用这些变量的文件中
分享图片,因为有时展开后更容易看到
代码在这里=>
require('dotenv/config') // require the dotenv/config at beginning of file
const express = require('express')
const mongoose = require('mongoose')
require('dotenv').config({ path: "./sample.env" });
在您使用环境变量的文件中,
尽早要求 "dotenv"
并在 config()
方法中指定 .env
文件的路径,即使它位于您的根目录或节点启动的同一目录中。
要求指定同目录文件的代码在答案的第一行
此外,如需进一步阅读,您可以访问 https://github.com/motdotla/dotenv#path
你猫试试这个。
-> npm i dotenv
并在代码中加入这段代码
require('dotenv').config({
path: 'your path here'
})
安装 dotenv 包
npm install --s dotenv
并在 index.js/ts 文件中添加此 require("dotenv").config();
。
我有 5 个 NodeJS 服务 运行ning,但其中一个有问题。
这是 nodemon.json
文件:
{
"watch": ["**/*.ts"],
"ext": "ts,json",
"ignore": ["./test/*.ts"],
"exec": "node -r ts-node/register -r dotenv/config Index.ts dotenv_config_path=$(pwd)/.env",
"env": {
"NODE_ENV": "development"
}
}
与其他服务一样。当我 运行 npm run dev
时,我收到错误消息,具体取决于从 .env 文件中获取的值,例如:
const LOCAL_CONFIGURATION = {
PORT_APP: 8082,
MONGODB: {
SERVER: process.env.MONGO_DTE,
AUTH: {
auth: {
password:process.env.MONGO_PASSWORD,
user:process.env.MONGO_USER
}
},
},
MS_NOTIFICACION: "http://localhost:8089/notificacion",
ELASTIC_PATH: process.env.ELASTIC_PATH,
...COMMON,
};
第一条错误信息是:
ConfigurationError: Missing node(s) option
产生该消息是因为它没有从 process.env.ELASTIC_PATH
读取值,但是如果我输入一个像“http://with.the.correct.url”这样的硬编码值,它再次尝试读取 运行,我会得到另一个错误:
Error: Credentials must be provided when creating a service client
该错误是因为它试图读取 password:process.env.MONGO_PASSWORD
和 user:process.env.MONGO_USER
等,因此,读取.env
文件时出现问题。我知道 .env
文件具有这些值,并且该文件是 UTF-8 格式,没有引号等。.env
文件与其他服务是同一个文件,它在其余部分工作正常但是我不知道为什么这里没有人阅读。
有什么想法吗?
编辑:
另外,我在 config.ts
文件中放入了一个 console.log(process.env);
,它显示的值如下:
但是 .env
中没有值,例如,图片中有一个名为 COMPUTERNAME
的值,所以如果我输入 console.log(process.env.COMPUTERNAME);
,我会得到:IBM-NOT87
为什么没有获取 .env 文件?
看来您需要 require/configure dotenv
。 Docs:
As early as possible in your application, require and configure dotenv.
require('dotenv').config()
进一步扩展@JBallin 的回答
您应该在 app.js
- 或者,如果这不起作用,那么您需要将其显式添加到您要使用这些变量的文件中
分享图片,因为有时展开后更容易看到
代码在这里=>
require('dotenv/config') // require the dotenv/config at beginning of file
const express = require('express')
const mongoose = require('mongoose')
require('dotenv').config({ path: "./sample.env" });
在您使用环境变量的文件中,
尽早要求 "dotenv"
并在 config()
方法中指定 .env
文件的路径,即使它位于您的根目录或节点启动的同一目录中。
要求指定同目录文件的代码在答案的第一行
此外,如需进一步阅读,您可以访问 https://github.com/motdotla/dotenv#path
你猫试试这个。
-> npm i dotenv
并在代码中加入这段代码
require('dotenv').config({
path: 'your path here'
})
安装 dotenv 包
npm install --s dotenv
并在 index.js/ts 文件中添加此 require("dotenv").config();
。