javascript - Mongoose 验证不起作用

标签 javascript node.js mongodb mongoose

我使用的是 Monggose 4.8.1。我有一个简单的架构:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var Organisation = new mongoose.Schema({
  name: {
    type: String,
    required: [true, 'Organisation name must be provided'],
    unique: [true, 'Organisation name must be unique']
  },
  createdBy: { 
    type: String, 
    ref: 'User'
  },
  createdOn: {
    type: Date,
    "default": Date.now
  },
  availableUntil: {
    type: Date
  }
});

mongoose.model('Organisation', Organisation);

我已将电子邮件 email@domain.com 保存在文档中。

现在我想再次尝试保存它,并首先使用 validateAsync 检查其是否有效。所以我预计会收到错误,因为电子邮件不是唯一的。

var organisation = new Organisation({
    name: 'email@domain.com'
});

var validResult = organisation.validateSync();

console.log('validResult is ', validResult);

但 validResult 始终是未定义...

编辑

我向我的架构添加了一个额外的属性:

  eggs: {
    type: Number,
    min: [6, 'Too few eggs'],
    max: 12
  }

然后尝试保存eggs: 3,这产生了错误。奇怪的是, Mongoose 验证似乎不会检查值是否唯一,即使在模式中设置时也是如此......

最佳答案

标记。

您能否验证 mongodb 是否有您保存的模型的记录:db.organizations.find()

看起来,如果您有 undefined 值,则意味着文档已按照 validateSync() 的文档通过了验证步骤:

  var err = doc.validateSync();
  if ( err ){
    handleError( err );
  } else {
    // validation passed
  }

关于javascript - Mongoose 验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087450/

相关文章:

javascript - 如何在 js 脚本中读取 docker 环境变量?

javascript - Sequelize : Modify output of date timestamp using Getters

mysql - 使用 Sequelize 在父对象中查找子对象

node.js - 空 req.body 接收到 node.js 的文本/纯 POST 请求

node.js - 用于 Meteor 文件存储的 MongoDB GridFS 与 AWS S3

javascript - 尝试使用 getUserMedia 帧速率约束

javascript - 是否存在具有高效插入/删除但具有位置顺序的数据结构?

javascript - 如何将 &lt;input&gt; 的值传递给 <a> 标签的 href?

c# - MongoDB:如何在 C# 中使用嵌套数组加载集合?

javascript - 在 Mongoose 中过滤子文档数组并仅返回匹配的元素