首页 > 解决方案 > 如何正确实施错误以检查设置的环境变量

问题描述

我正在绑定我的 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 的单个值并显示一个错误,说明哪个没有设置。

标签: node.jstypescript

解决方案


由于这条线而无法工作

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 之间)。

因此,简而言之,如果您想对每个属性进行特定检查,则必须单独检查每个属性。


推荐阅读