Обновить

Комментарии 7

По приведению типов и валидации ( а еще бы автоматической) явно не хватает Typescript. Да и может какую библиотеку кто написал?

Так class-validator вполне подойдёт.

import {
  IsFQDN,
  IsString,
  transformAndValidateSync,
} from 'class-validator';

class Environment {
    @IsFQDN()
    DATABASE_HOST: string;

    @IsString()
    DATABASE_USERNAME: string;

    @IsString()
    DATABASE_PASSWORD: string;
}

export default transformAndValidateSync(Environment, process.env);

Да, я к этому тоже пришел. Думал может чего более интересное существует...

Непонятно, как поможет защитить кодирование секретов в base64

Ещё бы пару слов о том, как все это добро использовать с SSR на nuxt например, было бы вообще здорово. А так огромное спасибо - было полезно.

Спасибо за фидбек!

Статья не про переменныые окружения, а про dotenv пакет и экспресс.
Аснхронное использование, вообще непонятно о чем\зачем? Все так же синхронно получаешь внутри асинхронной функции.

Про валидацию слишком поверхронсто. Есть смысл реализовывать интерфейс валидации, желательно на тайпскрит. Где будет удобно задавать правила для валидации например в таком виде
HOST: envSchema.string({format: "host"});
PORT: envSchema.number();
FEATURE_ENABLED: envSchema.boolean()
OPTIONAL: envSchema.string.optional()

Валидировать все на старте приложения
И получение переменных обернуть в класс\объект который на вход принимает ключи из описаной выше схемы и возвращает соответствующие typescript типы.
Например
Env.get("PORT") //выведет number
Env.get("UNDEFINED") // если в схеме такой ключ не задан. Не должно принимать такой ключ, или возвращать тип any, первый вариант предпочтительнее.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS