【发布时间】:2022-01-31 19:56:41
【问题描述】:
我已经通过 Joi 在 AWS 值中使用嵌套对象定义了验证模式:
const schema = Joi.object({
NODE_ENV: Joi.string()
.valid('development', 'production', 'test')
.default('development'),
PORT: Joi.number().default(3000),
AWS: Joi.object({
accessKeyId: Joi.string().required(),
secretAccessKey: Joi.string().required(),
region: Joi.string().required(),
bucket: Joi.string().required(),
}).required(),
});
然后我把我的架构放到配置模块中
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
validationSchema: schema,
validationOptions: {
abortEarly: false,
cache: false,
},
}),
FilesModule,
UsersModule,
PostsModule,
SharedModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
我在 .env 文件中添加了 AWS 变量的下一个值:
AWS={"region": "string", "accessKeyId":"string", "secretAccessKey": "string", "bucket": "string"}
但我在开始嵌套后收到了下一条错误消息:
> project-8v@0.0.1 start /Volumes/MacDATA/NestJs/project-8v
> nest start
/Volumes/MacDATA/Lern/NestJs/project-8v/node_modules/@nestjs/config/dist/config.module.js:66
throw new Error(`Config validation error: ${error.message}`);
^
Error: Config validation error: "AWS" must be of type object
typeof process.env.AWS 返回一个 string 并且 Joi 不明白他应该解析它,也许我需要在 validationOptions 中添加一些或者我错过了一些东西。我该如何解决?
【问题讨论】:
-
它可能取决于您的节点版本。你运行的是哪个版本?
-
在您发表评论后,我尝试了
v14.17.3和v16.13.2,但得到了相同的结果 -
@OroCan 好的。感谢您的反馈。你能看看这个链接:stackoverflow.com/a/63285574/14807111 吗?
-
无法理解它对我有何帮助。我的问题仅在于嵌套的 Joi 对象,我可以访问其他环境变量而不会出现任何错误。你能澄清一下你的观点吗?
-
好的。我认为他通常在读取 .env 数据时遇到问题。我没有正确理解。
标签: javascript nestjs joi