Environment variables 无法读取ts文件中的env文件
我编写了以下代码:Environment variables 无法读取ts文件中的env文件,environment-variables,nestjs,Environment Variables,Nestjs,我编写了以下代码: app.module.ts const dotenv = require('dotenv'); dotenv.config(); @Module({ imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({ migrations: [migrationPath], entities: [Users], }),AuthModule], controllers:
app.module.ts
const dotenv = require('dotenv');
dotenv.config();
@Module({
imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({
migrations: [migrationPath],
entities: [Users],
}),AuthModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
@Module({
imports: [
ConfigModule.forRoot(),
JwtModule.register({
secret: process.env.SECRETKEY,
signOptions: {
expiresIn:process.env.EXPIRESIN,
},
}),
],
})
export class AuthModule {}
我删除了数据库连接,因为它与问题无关,但它就在那里
auth.module.ts
const dotenv = require('dotenv');
dotenv.config();
@Module({
imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({
migrations: [migrationPath],
entities: [Users],
}),AuthModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
@Module({
imports: [
ConfigModule.forRoot(),
JwtModule.register({
secret: process.env.SECRETKEY,
signOptions: {
expiresIn:process.env.EXPIRESIN,
},
}),
],
})
export class AuthModule {}
我的系统没有读取SECRETKEY
的值,我在网上尝试了许多解决方案,但没有一个有效。
相反,我得到的是无法连接到数据库错误
。
PS:我刚才在问题中省略了db配置,但是在代码中,它们在那里并且工作正常,只是当我在
auth.module.ts
中添加ConfigModule.forRoot()
代码时才会出现问题
const dotenv = require('dotenv');
dotenv.config();
@Module({
imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({
migrations: [migrationPath],
entities: [Users],
}),AuthModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
@Module({
imports: [
ConfigModule.forRoot(),
JwtModule.register({
secret: process.env.SECRETKEY,
signOptions: {
expiresIn:process.env.EXPIRESIN,
},
}),
],
})
export class AuthModule {}
ConfigModule.forRoot()
将使env
变量仅在功能模块(AuthModule)中可用
通常,ConfigModule.forRoot()
只在AppModule
调用一次,其他模块只导入它,例如:
@模块({
进口:[
配置模块,
JwtModule.register({
秘密:process.env.SECRETKEY,
标志选项:{
expiresIn:process.env.expiresIn,
},
}),
],
})
您已经通过使用isGlobal:true
导入ConfigModule
使env变量全局可用,因此不需要在AuthModule
中导入ConfigModule
检查这里的文件-
注意:
ConfigModule
已经在内部使用了dotenv
,因此您不需要在AppModule
中使用dotenv
从AuthModule
中删除ConfigModule.forRoot()
ConfigModule.forRoot()
将使env
变量仅在功能模块(AuthModule)中可用
通常,ConfigModule.forRoot()
只在AppModule
调用一次,其他模块只导入它,例如:
@模块({
进口:[
配置模块,
JwtModule.register({
秘密:process.env.SECRETKEY,
标志选项:{
expiresIn:process.env.expiresIn,
},
}),
],
})
您已经通过使用isGlobal:true
导入ConfigModule
使env变量全局可用,因此不需要在AuthModule
中导入ConfigModule
检查这里的文件-
注意:
ConfigModule
已经在内部使用了dotenv
,因此您不需要在AppModule
中使用dotenv
我的工作示例auth.module.ts:
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LocalStrategy } from './local.strategy';
import { PassportModule } from '@nestjs/passport';
import { AuthController } from './auth.controller';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';
import { JwtStrategy } from './jwt.strategy';
import { UserModule } from '../entities/user/user.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports:[
PassportModule.register({ defaultStrategy: 'jwt' }),
UserModule,
JwtModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
secret: configService.get<string>('SECRET_KEY'),
expiresIn: configService.get<number>('EXPIRES_IN')
}),
inject: [ConfigService],
}),
],
controllers: [
AuthController
],
providers: [
AuthService,
LocalStrategy,
JwtStrategy,
ConfigService
],
exports: [
AuthService
],
})
export class AuthModule {}
我的工作示例auth.module.ts:
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LocalStrategy } from './local.strategy';
import { PassportModule } from '@nestjs/passport';
import { AuthController } from './auth.controller';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';
import { JwtStrategy } from './jwt.strategy';
import { UserModule } from '../entities/user/user.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports:[
PassportModule.register({ defaultStrategy: 'jwt' }),
UserModule,
JwtModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
secret: configService.get<string>('SECRET_KEY'),
expiresIn: configService.get<number>('EXPIRES_IN')
}),
inject: [ConfigService],
}),
],
controllers: [
AuthController
],
providers: [
AuthService,
LocalStrategy,
JwtStrategy,
ConfigService
],
exports: [
AuthService
],
})
export class AuthModule {}
如果使用dotenv,为什么还要再次使用ConfigModule?如果使用dotenv,为什么还要再次使用ConfigModule?我尝试了这种方法。现在它没有显示错误,但我仍然无法获取值。如果您能帮助我使用dotenv读取值,也许可以?如果dotenv仍在使用,您可以删除所有ConfigModule导入:)我尝试了这种方法。现在它没有显示错误,但我仍然无法获取值。如果您能帮助我使用dotenv读取值,也许可以?如果dotenv仍在使用,您可以删除所有ConfigModule导入:)