Проверка настроек при старте в Nest
Пусть обязательная строка в окружении опущена, а приложение всё равно стартует. Ошибка всплывёт позже, когда страница уже принимает запросы.
Поле validate у метода forRoot
вызывается один раз при запуске.
Функция передаёт объект окружения
в схему Zod четвёртой версии
через интерфейс Standard Schema.
При списке issues бросают
Error, и процесс не поднимает
сервер. Иначе возвращают проверенный
объект. Это не канал на маршруте
и не ответ клиенту с кодом отказа.
Покажем на примере постов:
BLOG_TITLE=Blog
Опишем схему обязательной строки заголовка:
import { z } from 'zod';
export const configSchema = z.object({
BLOG_TITLE: z.string(),
});
В корневом модуле проверим окружение перед стартом:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { configSchema } from './config.schema.js';
@Module({
imports: [
ConfigModule.forRoot({
validate: async (config) => {
const result = await configSchema['~standard'].validate(config);
if (result.issues) {
throw new Error(result.issues[0].message);
}
return result.value as Record<string, unknown>;
},
}),
],
})
export class AppModule {}
Добавьте проверку окружения при старте проекта работников: без названия сайта приложение не должно запускаться.