gpt4 book ai didi

node.js - 从 JSON 模块加载 Nest.js 应用程序的端口号

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:17 31 4
gpt4 key购买 nike

在我基于 Nest.js 的应用程序中,我尝试使用一个配置文件来定义应用程序的所有配置。

configuration.json 文件如下所示:

{
"environment": "development",
"backendPort": 8080,
"appRootPath": ".",
...more configuration...
}

在我的 Nest.js 应用程序中,ma​​in.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();

我已启用 TypeScript 的 resolveJsonModule 功能,如 TypeScript 2.9 Release notes 中所述和 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。

最佳答案

是的。使用这个 - https://docs.nestjs.com/techniques/configuration NestJS 文档的一部分来创建 ConfigService。如果需要,可以用 json 替换 dotenv。然后:

import {NestFactory} from '@nestjs/core';
import {ConfigService} from 'src/config/config.service';
import {AppModule} from './app.module';

let bootstrap = async () => {
const app = await NestFactory.create(AppModule);
const configService: ConfigService = app.get(ConfigService);
await app.listen(configService.getPort);
};

bootstrap();

现在您可以在大部分代码中注入(inject) ConfigService + 在加载时您可以使用 Joi 验证它。希望这会有所帮助。

关于node.js - 从 JSON 模块加载 Nest.js 应用程序的端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51116044/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com