在NestJS生产版本中未提取TypeORM.env配置



我正在开发一个通过TypeORM访问postgres数据库的NestJS应用程序。在开发模式(npm run start:debug(下一切都很好。然而,在使用npm run build构建并尝试通过node /dist/main.js运行应用程序后,它无法启动,并出现以下错误:

error: password authentication failed for user "(my system user name)"
at Parser.parseErrorMessage (/home/(my system user name)/application/node_modules/pg-protocol/dist/parser.js:287:98)

app.module的代码相当简单:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
...
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
TypeOrmModule.forRoot(),
...
ConfigModule.forRoot({
isGlobal: true,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}

TypeORM配置存储在.env文件中。构建完成后,我还将其复制到dist文件夹中。从现在起,只要它在开发和生产中都能工作,就不必通过.env文件来实现这一点。知道为什么在生产中没有采用这种配置吗?

编辑:我还尝试了其他几种配置方法,例如NestJS setup TypeOrm连接中描述的.env和@NestJS/config。部分参与开发,但从未参与生产构建。

该问题与TypeORM/NestJS无关。我只是简单地使用了应用程序中另一个地方的硬连线配置。无论如何,这是最符合我需求的Nest配置:

import settings from './config/settings';
import { Module } from '@nestjs/common';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
load: [settings],
isGlobal: true,
}),

TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) =>
Object.assign({}, configService.get<TypeOrmModuleOptions>('database'), {
entities: [
(entity classes, auto-resolution does not work),
...
],
})
}),
...
],
controllers: [],
providers: [],
})
export class AppModule {}

以及相应的配置文件/config/settings.ts:

export default () => ({
database: {
type: ...,
host: ...,
port: ...,
username: ...,
password: ...,
database: ...,
synchronize: ...,
logging: ...
},
});

最新更新