node.js - 如何正确实施错误以检查设置的环境变量
问题描述
我正在绑定我的 NodeJS、Typescript 应用程序来设置新的配置文件,这些文件采用 .env 变量,如果没有设置一个特定的变量会引发错误。
接下来是我的配置文件,最后是我所做的错误,但需要知道正确的方法应该是什么,以及当缺少 .env 变量时这些错误在哪里显示。
import dotenv = require('dotenv');
dotenv.config();
export interface Config {
//Server set
serverPort: number;
serverUrl: string;
// Database set
dbPort: number;
dbHost: string;
dbUsername: string;
dbPassword: string;
database: string;
}
const config: Config = {
// Server
serverPort: +process.env.SERVER_PORT || 4000,
serverUrl: process.env.SERVER_URL,
// Database
dbPort: +process.env.DB_PORT || 5432,
dbHost: process.env.DB_HOST,
dbUsername: process.env.DB_USERNAME,
dbPassword: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
};
if (!config.serverPort) throw new Error('Environment variable "SERVER_PORT" is not defined');
if (!config.serverUrl) throw new Error('Environment variable "SERVER_URL" is not defined');
export { config };
我尝试实现if(...)
但我尝试过并且似乎没有以上述方式工作,如果我不设置 .env 并且我想检查它,则不会显示任何错误。
我的期望是有一个 if 来检查 env 的单个值并显示一个错误,说明哪个没有设置。
解决方案
由于这条线而无法工作
serverPort: +process.env.SERVER_PORT || 4000,
这意味着如果没有process.env.SERVER_PORT
(或者它的值类似于布尔值false
),那么您将其设置4000
为值。与检查相同!process.env.SERVER_PORT
。
因此,稍后当您检查它时,!config.serverPort
总是会有一个有效值,因为您之前已经“修复”了它。
我不明白为什么要在没有值的情况下添加默认值,但是稍后您会检查是否有值。
我想您要检查的是一个有效的数值,因此您必须明确检查,例如:
if (!isFinite(config.serverPort) || config.serverPort < 1 || config.serverPort > 65535) throw whatever you want to throw
这将检查该值是否为有效数字,并且是否适合有效端口范围(1 到 65535 之间)。
因此,简而言之,如果您想对每个属性进行特定检查,则必须单独检查每个属性。
推荐阅读
- ruby-on-rails - 如何解决 SMTPAuthentication 错误/Ruby on Rails 应用程序、设计、SendGrid 托管在 Heroku 上
- clojure - 映射数组映射的嵌套向量
- scala - Scala SBT - 外部存储库
- c++ - cin.getline 在 while 循环中
- python - Kaldi_io 使用 python 读取 .scp/.ark 文件时出错
- python - 使用滑动日期栏为 Plotly 地图制作动画
- scala - Scala中的幻象存在类型
- python - Multiprocessing print statement doesn't work in Spyder IDE
- discord.py - 使用表情符号 Discord.py 写入文件 message.content 的问题
- javascript - 在 JavaScript 位置查找下一个单词的位置