问题描述
环境:Node.js,Dotenv
通常仅在主文件(例如app.js)中需要 require('dotenv').config()
。这样一来,process.env
就可以在应用程序的每个文件中被引用。这个答案与https://stackoverflow.com/a/58697426/12582054
但是,我只是遇到一个实例,如果我没有在附加文件中包含require('dotenv').config()
,并且我不确定为什么,则会出错。
简化示例:
app.js
const path = require('path');
// Custom path to .env file.
require('dotenv').config({ path: path.join(__dirname,'/models/.env')});
const middlewareFile = require('./controllers/middleware-file');
middleware-file.js
const usps = require('usps-webtools-promise').default;
const usps = new usps({
userId: process.env.usps_USER_ID,properCase: Boolean
});
usps-webtools-promise似乎是引发错误的模块。
如果我在middleware-file.js的顶部未包含dotenv引用,则usps模块将引发错误。它正好指向值process.env.usps_USER_ID
的第一个字母。
抛出新错误_1.default(“必须通过usps用户ID”);
uspsError [usps Webtools错误]:必须传递usps userId
at Object。 (c:\ website \ controllers \ middleware-file.js:35:14)
const path = require('path');
require('dotenv').config({ path: path.join(__dirname,'../models/.env')});
解决方法
请确保致电require('dotenv').config({ path: path.join(__dirname,'../models/.env')});
as early as possible in your application。此外,您可以使用以下命令记录结果或检查错误:
const dotenv = require('dotenv').config({ path: path.join(__dirname,'/models/.env')});
if (dotenv.error) {
// Something went wrong
console.error(dotenv.error);
} else {
// Log parsed values
console.log(dotenv.parsed);
}