NestJs:SCRAM-SERVER-FIRST-MESSAGE:客户端密码必须是字符串
NestJs: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string
我在使用 typeorm 和 postgres 连接到 nest.js 中的数据库时遇到问题。
我在项目根目录下创建了一个.env文件,内容如下
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DATABASE=db-name
在app.module.ts中我写了下面的代码:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { FeedModule } from './feed/feed.module';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.POSTGRES_HOST,
port: parseInt(<string>process.env.POSTGRES_PORT),
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DATABASE,
autoLoadEntities: true,
synchronize: true,
}),
FeedModule,
],
})
export class AppModule {}
但是当我 运行 通过 npm 启动应用程序时,它会抛出此错误:new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')
我错过了什么或做错了什么?
如 docs 中所述,您可以定义一个工厂函数,您可以在其中注入配置服务,从而解析相应的值:
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: 'postgres',
host: configService.get('POSTGRES_HOST'),
port: +configService.get<number>('POSTGRES_PORT'),
username: configService.get('POSTGRES_USER'),
password: configService.get('POSTGRES_PASSWORD'),
database: configService.get('POSTGRES_DATABASE'),
synchronize: true,
autoLoadEntities: true,
}),
inject: [ConfigService],
});
我就是这样解决这个问题的:
import { ConfigModule, ConfigService } from '@nestjs/config';
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersModule } from './users/users.module';
import { config } from 'ormconfig';
@Module({
imports: [
ConfigModule.forRoot(),
UsersModule,
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: () => ({
type: 'postgres',
host: process.env.POSTGRES_HOST,
port: Number(process.env.POSTGRES_PORT),
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB,
entities: ['dist/**/*.entity{.ts,.js}'],
synchronize: true,
}),
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
我在使用 typeorm 和 postgres 连接到 nest.js 中的数据库时遇到问题。
我在项目根目录下创建了一个.env文件,内容如下
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DATABASE=db-name
在app.module.ts中我写了下面的代码:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { FeedModule } from './feed/feed.module';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.POSTGRES_HOST,
port: parseInt(<string>process.env.POSTGRES_PORT),
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DATABASE,
autoLoadEntities: true,
synchronize: true,
}),
FeedModule,
],
})
export class AppModule {}
但是当我 运行 通过 npm 启动应用程序时,它会抛出此错误:new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')
我错过了什么或做错了什么?
如 docs 中所述,您可以定义一个工厂函数,您可以在其中注入配置服务,从而解析相应的值:
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: 'postgres',
host: configService.get('POSTGRES_HOST'),
port: +configService.get<number>('POSTGRES_PORT'),
username: configService.get('POSTGRES_USER'),
password: configService.get('POSTGRES_PASSWORD'),
database: configService.get('POSTGRES_DATABASE'),
synchronize: true,
autoLoadEntities: true,
}),
inject: [ConfigService],
});
我就是这样解决这个问题的:
import { ConfigModule, ConfigService } from '@nestjs/config';
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersModule } from './users/users.module';
import { config } from 'ormconfig';
@Module({
imports: [
ConfigModule.forRoot(),
UsersModule,
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: () => ({
type: 'postgres',
host: process.env.POSTGRES_HOST,
port: Number(process.env.POSTGRES_PORT),
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB,
entities: ['dist/**/*.entity{.ts,.js}'],
synchronize: true,
}),
}),
],
controllers: [],
providers: [],
})
export class AppModule {}