gpt4 book ai didi

node.js - 为什么 useFactory 选项会让我在 Nestjs 配置中出错?

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:24 27 4
gpt4 key购买 nike

类型 '(configService: ConfigService) => Promise<{ 类型:字符串;端口:字符串;用户名:字符串;密码:字符串;数据库:字符串;主机:字符串;实体:字符串[];同步: bool 值; }>' 不可分配给类型 '(...args: any[]) => ({ retryAttempts?: number; retryDelay?: number; keepConnectionAlive?: boolean; } & Partial) | ({ retryAttempts?: number; retryDelay?: number; keepConnectionAlive?: boolean; } & Partial<...>) | ... 11 更多... | promise <...>'。输入 'Promise<{ 类型:字符串;端口:字符串;用户名:字符串;密码:字符串;数据库:字符串;主机:字符串;实体:字符串[];同步: bool 值; }>' 不可分配给类型 '({ retryAttempts?: number; retryDelay?: number; keepConnectionAlive?: boolean; } & Partial) | ({ retryAttempts?: number; retryDelay?: number; keepConnectionAlive?: boolean; } & Partial<...>) | ... 11 更多... | promise <...>'。输入 'Promise<{ 类型:字符串;端口:字符串;用户名:字符串;密码:字符串;数据库:字符串;主机:字符串;实体:字符串[];同步: bool 值; }>' 不可分配给类型“Promise”。类型 '{ 类型:字符串;端口:字符串;用户名:字符串;密码:字符串;数据库:字符串;主机:字符串;实体:字符串[];同步: bool 值; }' 不可分配给类型“TypeOrmModuleOptions”。类型 '{ 类型:字符串;端口:字符串;用户名:字符串;密码:字符串;数据库:字符串;主机:字符串;实体:字符串[];同步: bool 值; }' 不可分配给类型 '{ retryAttempts?: number;重试延迟?:数字; keepConnectionAlive?: bool 值; } & 部分的'。 类型 '{ 类型:字符串;端口:字符串;用户名:字符串;密码:字符串;数据库:字符串;主机:字符串;实体:字符串[];同步: bool 值; }' 不可分配给类型“Partial”。 属性“type”的类型不兼容。 类型“string”不可分配给类型“aurora-data-api”。

这是nestjs给我的消息,我按照文档中的说明进行操作,但对我来说不起作用。

这是我的app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CategoryModule } from './category/category.module';
import { ProductModule } from './product/product.module';
import { UnitModule } from './unit/unit.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from './config/config.module';
import { ConfigService } from './config/config.service';
import { RolModule } from './rol/rol.module';
import { UserModule } from './user/user.module';
import { AuthModule } from './auth/auth.module';

@Module({
imports: [TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
type: 'mysql',
port: configService.port,
username: configService.username,
password: configService.password,
database: configService.database,
host: configService.host,
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
}), CategoryModule, UnitModule, ProductModule, RolModule, UserModule, AuthModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

这是我的 config/config.service.ts

import * as dotenv from 'dotenv';
import * as fs from 'fs';
import * as Joi from '@hapi/joi';

export interface EnvConfig {
[key: string]: string;
}

export class ConfigService {
private readonly envConfig: EnvConfig;

constructor(filePath: string) {
const config = dotenv.parse(fs.readFileSync(filePath));
this.envConfig = this.validateInput(config);
}

private validateInput(envConfig: EnvConfig): EnvConfig {
const envVarsSchema: Joi.ObjectSchema = Joi.object({
NODE_ENV: Joi.string()
.valid('development', 'production', 'test', 'provision')
.default('development'),
PORT: Joi.number().default(3000),
HOST: Joi.strict(),
USERNAME: Joi.string(),
PASSWORD: Joi.string(),
DATABASE: Joi.string(),
});

const { error, value: validatedEnvConfig } = envVarsSchema.validate(
envConfig,
);
if (error) {
throw new Error(`Config validation error: ${error.message}`);
}
return validatedEnvConfig;
}

get port(): string {
return String(this.envConfig.PORT);
}
get host(): string {
return String(this.envConfig.HOST);
}
get username(): string {
return String(this.envConfig.USERNAME);
}
get password(): string {
return String(this.envConfig.PASSWORD);
}
get database(): string {
return String(this.envConfig.DATABASE);
}
}

这是我的 config/config.module.ts

import { Module } from '@nestjs/common';
import { ConfigService } from './config.service';

@Module({
providers: [{
provide: ConfigService,
useValue: new ConfigService(`${process.env.NODE_ENV || 'development'}.env`),
}],
exports: [ConfigService],
})
export class ConfigModule {}

useFacetory 选项是产生错误的选项,但我不明白为什么我感谢任何人的帮助

最佳答案

所以问题是当我尝试从 .env 文件获取 PORT 时,必须将类型转换为 Number。示例:

useFactory: async (configService: ConfigService) => ({
type: 'mysql',
port: Number(configService.port),
username: configService.username,
password: configService.password,
database: configService.database,
host: configService.host,
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),

解决问题

关于node.js - 为什么 useFactory 选项会让我在 Nestjs 配置中出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58090816/

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