Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Joi getting validationSchema: Joi.object() error

After installing joi on nestjs framework i'm trying to validate two property by joi something like:

import Joi from 'joi';
...
ConfigModule.forRoot({
    isGlobal: true,
    validationSchema: Joi.object(
        {
            PORT: Joi.number().required(),
            MONGODB_URI: Joi.string().required(),
        }
    )
}),
...

but i get this error:

Cannot read properties of undefined (reading 'object')

main.ts:

async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    // @ts-ignore
    app.useGlobalFilters(new ValidationPipe());
    const configService = app.get(ConfigService);
    const port = configService.get<string>('PORT');
    await app.listen(port);
}

full error:

D:\develop\api\src\app.module.ts:16
            validationSchema: Joi.object(
                                  ^
TypeError: Cannot read properties of undefined (reading 'object')
    at Object.<anonymous> (D:\develop\api\src\app.module.ts:16:35)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (D:\develop\api\src\main.ts:2:1)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
PS D:\develop\api>
like image 810
DolDurma Avatar asked Aug 23 '26 22:08

DolDurma


1 Answers

Either use import * as Joi from 'joi' or set esModuleInterop: true in your tsconfig.json. Joi doesn't use a default export by default, so either a named/namespace import needs to be used (first option) or you need to tell Typescript to treat default and named imports similarly (second option)

like image 121
Jay McDoniel Avatar answered Aug 25 '26 11:08

Jay McDoniel