В моем приложении на основе Nest.js я пытаюсь использовать один файл конфигурации для определения всей конфигурации приложения.
Файл configuration.json выглядит следующим образом:
{
"environment": "development",
"backendPort": 8080,
"appRootPath": ".",
...more configuration...
}
А в моем приложении Nest.js main.ts есть:
import { NestFactory } from "@nestjs/core";
import configuration from "../configuration.json";
import { AppModule } from "./app.module";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(configuration.backendPort);
}
bootstrap();
Я включил функцию resolJsonModule в TypeScript, как упомянуто в Замечания к выпуску TypeScript 2.9 и код VS успешно распознали импорт и предоставляют IntelliSense и проверку типов.
Но когда я пытаюсь запустить приложение через
ts-node -r tsconfig-paths/register src/main.ts
Я получаю ошибку:
(node:5236) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'backendPort' of undefined
at d:\CodeDev\NestCMS\backend\src\main.ts:10:36
at Generator.next (<anonymous>)
at fulfilled (d:\CodeDev\NestCMS\backend\src\main.ts:4:58)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
at Function.Module.runMain (module.js:695:11)
at Object.<anonymous> (d:\CodeDev\NestCMS\backend\node_modules\ts-node\src\_bin.ts:177:12)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
(node:5236) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:5236) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Есть ли способ элегантно определить порт приложения, как я пытался?
Я не хочу, чтобы номер порта был жестко задан в файле main.ts. Я хочу, чтобы он настраивался с помощью некоторой опции, чтобы позволить мне развернуть одну и ту же сборку приложения в разных средах, где единственное отличие будет в файле configuration.json.