我想判断我的文档是否有媒体URL,这样它也应该有媒体类型.我添加了这个验证器

mediaURL: {
                type: String,
                default: ''
            },
            mediaType: {
                type: String,
                enum: ['video', 'photo', 'audio', 'none'],
                validate: {
                  validator: function () {
                    return( (this.mediaURL && this.mediaType) || !this.mediaURL );
                  },
                  message: 'There should be a mediaURL in the post to have a media type',
                }
              },

我正在使用Mongoose,它不工作,我仍然可以保存没有媒体类型的文档,而有一个媒体URL.

我try 了不同的方法来实现验证,比如这样

mediaType: {
    type: String,
    enum: ['video', 'photo', 'audio', 'none'],
    validate: {
        validator: function () {
            if (!this.mediaURL) {
                // No mediaURL, so mediaType is allowed to be empty
                return true;
            }
            return !!this.mediaType; // Ensure mediaType is present when mediaURL is provided
        },
        message: 'There should be a mediaURL in the post to have a media type',
    }
},

但它仍然不起作用.

推荐答案

您可以执行以下操作:

Schema.pre('validate', function (next) {
  if (this.mediaURL && !this.mediaType) { 
    this.invalidate('mediaType', 'mediaType cannot be empty', this.mediaType);
  }

  next();
});
  1. Schema.pre定义了模式的预挂接.这是一个中间件(而不是验证器函数),因此返回truefalse并不重要.

一旦您的中间件代码被执行,您需要调用next()来继续执行.

https://mongoosejs.com/docs/api/schema.html#Schema.prototype.pre()

  1. invalidate()会将架构中的路径标记为无效,这将导致验证失败.

这就是您的定制验证发生的地方(通过判断mediaURLmediaType).

https://mongoosejs.com/docs/api/document.html#Document.prototype.invalidate()

Node.js相关问答推荐

NX无法使用缓存运行根级脚本

如何在MongoDB中更新嵌套数组

"sh:/usr/local/bin/node:当它存在于文件目录中时未找到

关于Node.js中的AES加密库的问题

构建期间 Docker 容器中的 npm 安装失败

使用更新版本仍然找到包@angular/fire但不支持原理图

每个数组值在 mongodb 中查找一个文档

如何解决未调用 Express 错误处理程序的问题

module.exports=require('other') 和临时变量有什么区别?

无法使用 node 预签名 url 从 React 将图像文件上传到 s3

处理 UTC 日期和future

为什么我的 Cypress Post 请求的请求正文是空的?

如何从哪个应用程序用户中找到在 Firebase 身份验证中进行身份验证的用户

mongoose.model() 方法返回未定义

在数组的另一个对象中获取数组的mongoose 对象

仅显示用户在 Reactjs 中使用服务器端发布的帖子是 Node Js、Mongodb

AWS EC2 npm install 突然很慢

使用 Socket.io 将客户端连接到服务器

使用 pg-promise 进行多行插入

在 Node.js 中获取终端的宽度