javascript - 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' 在这里声明。任何
解决方案
问题是因为joi-objectid@2.0.0
不兼容joi@17.4.2
。
修复:
升级joi-objectid
到v4.0.2
关于 Typescript 错误(属性 'objectId' 可能不存在于类型 'Root' 上),您需要增加类型Joi
以添加objectId
属性。这可以通过创建声明文件来完成:
// src/types/joi.d.ts
import { Schema } from "joi";
declare module "joi" {
interface Root {
objectId(): Schema;
}
}
推荐阅读
- c - protobuf-c 在 Cygwin 上构建
- sql - 性能问题 Where 子句
- findstr - Windows:查找字符串下一行
- cloudflare - cloudflare 的 url 匹配如何在速率限制规则中工作
- html - 使用按钮 OnClick 角度编辑标题
- javascript - 带有大视图框的 SVG 没有出现在带有 react-native-svg 的移动设备上
- java - 如何在我的 Android pdf 阅读器应用中实现搜索功能?
- python - Python 3.8 DLL 问题 - ImportError: DLL load failed while importing _libprojectApiPy38_64: The specified module could not be found
- xml - XQuery 中是否有类似于 SQL 中的 LIMIT x, y 的东西?
- html - 如何定义模板以重用 HTML/CSS 中的 SVG 图形按钮?