使用 Mongoose.js 保存模型时,为啥会出现“无法调用未定义的 doValidate”?
Posted
技术标签:
【中文标题】使用 Mongoose.js 保存模型时,为啥会出现“无法调用未定义的 doValidate”?【英文标题】:Why do I get "cannot call doValidate of undefined" when saving a model using Mongoose.js?使用 Mongoose.js 保存模型时,为什么会出现“无法调用未定义的 doValidate”? 【发布时间】:2011-08-06 20:14:21 【问题描述】:请有人帮忙解释一下我在使用 mongoose.js ORM 时做错了什么,并就如何解决问题给我一些指导。
问题
当尝试使用 mongoose.js orm 保存模型时,我收到一个错误:
无法调用未定义的方法“doValidate”
架构定义
我正在尝试使用此架构保存对象:
var myEntity = new Schema(
objectId : ObjectId
,title : String
, decription : String
, ownerId : String
, start :
something :
// ...
//removed for brevity!
, end :
something :
// ...
//removed for brevity!
, useruid : String
, _created : type : Date, "default": new Date()
, _updated : type : Date, "default": new Date()
mongoose.model("MyEntity", MyEntity);
定义模型
我已将模型放在一个容器中,以便我可以通过以下方式访问它们:
var xyz = new models['whatever']();
容器对象如下:
var models =
MyEntity : mongoose.model("MyEntity"),
;
创建模型
我创建模型,传入一个带有所有正确“映射”或属性的 JSON 对象:
var newEntity = new models.MyEntity(someObj);
保存模型
那么下面的代码就是我保存模型的方法:
newEntity.save(function(error)
if (error)
console.log(error);
writePostEntityResponse(newEntity);
);
我看不出我做错了什么,错误消息虽然很清楚,但对我没有多大帮助。
【问题讨论】:
【参考方案1】:通常当我收到该错误时,是因为我尝试保存一个不存在的字段,可能是因为我更改了表单或其他内容。
Mongo 自动创建 ObjectId。您是否尝试过删除该字段并查看会发生什么?
【讨论】:
谢谢约翰 - 你的第一句话:'...我试图保存一个不存在的字段'让我检查了我发送的数据,我注意到一个错字字段名称,修复后将所有内容整理出来! 真棒刘易斯!这是我第一次选择的答案。很高兴我能帮上忙!【参考方案2】:顺序应该很重要。如果您在将架构附加到模型之前定义 models
,那么您将处理正确的对象。
var schema = new Schema(...);
mongoose.model('ModelName', mySchema)
var models =
"foo": mongoose.model('ModelName')
var xyz = new models['foo']();
xyz.save();
关于报错信息,mongoose 在 build 中有一个验证系统,所以只要你保存它,它就会验证。默认情况下没有验证规则,所以它什么也不做。再次,您尝试保存的模型对象似乎缺少某些内容,可能是架构,也可能是验证代码。
【讨论】:
@Lewis 很容易忘记! 它就在那里,通过我更新的帖子,您可以看到我正在以一种不那么标准的方式访问模型!感谢您到目前为止的帮助:) @Lewis 顺序很重要,您应该在初始化models
之前使用架构定义模型。
@Raynos - 不过我是,新架构 > mongoose.models(...) > 新模型(...) > xyz.save() :对吗?
@Raynos。我相信这就是我正在做的事情。我将模型容器导出为模块并调用: var xyz = new models['foo'](); xyz.save();还有什么想法吗?以上是关于使用 Mongoose.js 保存模型时,为啥会出现“无法调用未定义的 doValidate”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 Mongoose JS 删除嵌入式子文档数组的元素不起作用?
用sqlplus连接数据库时,为啥会出Oracle not available错误?
Node.js Mongoose.js 字符串到 ObjectId 函数