Node.js &引用;对象{}没有方法';铸造';“错误”;尝试将项添加到mongoose数组时
为了便于学习,我正在尝试使用node.js、mongoose和backbone创建一个todo应用程序。 到目前为止,我定义了这些模型:Node.js &引用;对象{}没有方法';铸造';“错误”;尝试将项添加到mongoose数组时,node.js,express,mongoose,Node.js,Express,Mongoose,为了便于学习,我正在尝试使用node.js、mongoose和backbone创建一个todo应用程序。 到目前为止,我定义了这些模型: var TaskSchema = new mongoose.Schema({ title: { type:String }, content: { type:String } , created: {type:Date, 'default':Date.now}, due: {type:Date}, accountId:
var TaskSchema = new mongoose.Schema({
title: { type:String },
content: { type:String } ,
created: {type:Date, 'default':Date.now},
due: {type:Date},
accountId: {type:mongoose.Schema.ObjectId}
});
var Task = mongoose.model('Task',TaskSchema);
var AccountSchema = new mongoose.Schema({
email: { type:String, unique: true},
password: { type:String } ,
name: { first: {type:String},
last: { type:String } },
birthday: {
day: {type:Number, min:1, max:31, required:false},
month: {type:Number, min:1, max:12, required:false},
year: {type:Number}
},
photoUrl: {type:String},
biography:{type:String},
tasks:[Task]
});
var Account = mongoose.model('Account',AccountSchema);
此外,我还有以下方法来添加任务:
var enter_new_task = function(options,callback){
var title = options.title;
var content = options.content;
var due = options.due;
var account = options.account;
var task = new Task({
title: title,
content: content,
due: due,
accountId: account._id
});
account.tasks.push(task);
account.save(function(err) {
if ( err ) {
console.log("Error while saving task: " + err);
}else{
callback();
}
})
}
但当我确实添加了一个任务时,我会得到一个错误,上面写着:
“对象{}没有方法'cast'”
使用以下堆栈跟踪:
at Array.MongooseArray._cast (/home/lior/workspace/todo_express/node_modules/mongoose/lib/types/array.js:107:30)
at Object.map (native)
at Array.MongooseArray.push (/home/lior/workspace/todo_express/node_modules/mongoose/lib/types/array.js:261:23)
at Object.enter_new_task (/home/lior/workspace/todo_express/models/Account.js:107:17)
at /home/lior/workspace/todo_express/app.js:104:18
at Promise.<anonymous> (/home/lior/workspace/todo_express/models/Account.js:41:4)
at Promise.<anonymous> (/home/lior/workspace/todo_express/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
at Promise.EventEmitter.emit (events.js:95:17)
at Promise.emit (/home/lior/workspace/todo_express/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)
at Promise.fulfill (/home/lior/workspace/todo_express/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20)
9
at Array.mongoosarray.\u cast(/home/lior/workspace/todo\u express/node\u modules/mongoose/lib/types/Array.js:107:30)
at Object.map(本机)
在Array.mongoosarray.push(/home/lior/workspace/todo_express/node_modules/mongoose/lib/types/Array.js:261:23)
在Object.enter_new_task(/home/lior/workspace/todo_express/models/Account.js:107:17)
at/home/lior/workspace/todo_express/app.js:104:18
答应。(/home/lior/workspace/todo_express/models/Account.js:41:4)
答应。(/home/lior/workspace/todo_express/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
在Promise.EventEmitter.emit(events.js:95:17)
在Promise.emit(/home/lior/workspace/todo_express/node_modules/mongoose/node_modules/mpromise/lib/Promise.js:79:38)
在Promise.fulfill(/home/lior/workspace/todo_express/node_modules/mongoose/node_modules/mpromise/lib/Promise.js:92:20)
9
问题似乎出在将新任务添加到任务数组的行上
在google或stack上找不到任何东西,所以我想知道,有人知道哪里出了问题吗
谢谢 错误在AccountSchema定义中。子文档类型应该是架构,而不是模型
var AccountSchema = new mongoose.Schema({
//...
tasks:[TaskSchema]
});
或者,如果您没有直接访问模式的权限,而只能访问模型,则可以使用点符号访问模型的模式,如下所示:
var AccountSchema = new mongoose.Schema({
//...
tasks:[Task.schema]
});
module.exports = mongoose.model('Task', TaskSchema);
如果您已在另一个文件中定义了架构,并且正在使用类似以下内容,这将非常有用:
var AccountSchema = new mongoose.Schema({
//...
tasks:[Task.schema]
});
module.exports = mongoose.model('Task', TaskSchema);
在AccountSchema定义中,它不应该是
tasks:[TaskSchema]
而不是“Task”?您是对的。。。把它写下来作为答案,我会接受的。谢谢你也可以做一些模型。模式,这是我通常做的。这是非常正确的!它肯定解决了我的问题。不过我很难找到这个,因为我的堆栈跟踪中也有“undefined is not a function”(未定义不是函数),而且_cast错误在堆栈跟踪中有些隐藏。谢谢!大加法