首页 > 解决方案 > AssertionError [ERR_ASSERTION]:您必须将 Joi 作为参数传递

问题描述

如何解决这个 Joi 问题(使用 express,joi@17.4.2,joi-objectid@2.0.0,,mongoose)我正在尝试使用 ref 链接两个 mongoose 模式作为

{
...
   enroledcourses: [{
        type: Schema.Types.ObjectId,
        ref: "courses"
    }]
}

joi 验证

...    
enroledcourses: Joi.array().items(Joi.ObjectId()).required()

课程集合很好,我已将其导入 index.js,如下所示

const Joi = require("joi")
Joi.objectId = require("joi-objectid")(Joi);

但我最终得到了这个错误 在此处输入图像描述

AssertionError [ERR_ASSERTION]:您必须将 Joi 作为参数传递给 Object. (D:\Programing projects\2021\ikodeafrika\ikodeafrikabackend\index.js:2:39)

index.js:2:39 是上面的 joi.objectId 导入,当我将鼠标悬停在 joi.objectId 导入语句上时,我得到了这个

“Root”类型上可能不存在属性“objectId”。您的意思是 'object'?ts(2568) index.d.ts(1998, 9): 'object' 在这里声明。任何

标签: javascriptarraysmongoose-schemajoiobjectid

解决方案


问题是因为joi-objectid@2.0.0不兼容joi@17.4.2

修复:
升级joi-objectidv4.0.2

关于 Typescript 错误(属性 'objectId' 可能不存在于类型 'Root' 上),您需要增加类型Joi以添加objectId​​属性。这可以通过创建声明文件来完成:

// src/types/joi.d.ts
import { Schema } from "joi";

declare module "joi" {
  interface Root {
    objectId(): Schema;
  }
}

推荐阅读