【问题标题】:AssertionError [ERR_ASSERTION]: you must pass Joi as an argumentAssertionError [ERR_ASSERTION]:您必须将 Joi 作为参数传递
【发布时间】:2021-12-01 10:21:22
【问题描述】:

如何解决这个 Joi 问题(使用 express, joi@17.4.2,joi-objectid@2.0.0, ,mongoose)我正在尝试使用 ref as 链接两个 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);

但我最终得到了这个错误 enter image description here

AssertionError [ERR_ASSERTION]:您必须将 Joi 作为参数传递 在 joiObjectId (D:\Programing projects\2021\ikodeafrika\ikodeafrikabackend\node_modules\joi-objectid\index.js:6:3) 在对象。 (D:\Programing projects\2021\ikodeafrika\ikodeafrikabackend\index.js:2:39)

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

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

【问题讨论】:

    标签: javascript arrays mongoose-schema joi objectid


    【解决方案1】:

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

    修复:
    joi-objectid升级为v4.0.2

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

    // src/types/joi.d.ts
    import { Schema } from "joi";
    
    declare module "joi" {
      interface Root {
        objectId(): Schema;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多