我正在使用MeanJS,遇到了一个障碍。如果可能的话,我想使用MeanJS提供的Angular中$resource服务的$update函数。以下是我尝试做的一个非常简化的版本:
Mongoose模式:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var Lotion = new Schema({
name: String;
});
var BasketSchema = new Schema({
lotions: [{
type: Schema.ObjectId,
ref: 'Lotion'
}]
});
Angular:请注意,我已经在页面加载时检索到了Lotion对象和Basket对象,现在只是尝试将Lotion对象添加到篮子的乳液数组中。
$scope.putTheLotionInTheBasket = function(lotion, basket){
basket.lotions.push(lotion);
basket.$update(function(data){
//success
},
//failure
function(error){
$scope.error = error.data.message;
}
)
}
正如你所看到的,这是行不通的。它返回一个带有Cast to ObjectId failed for value "[object Object]" at path "agencies", name:CastError,…}
的400
有没有一种简单但正确的方法可以做到这一点?我是否必须创建一个新的REST端点和$resource函数,并传递乳液ID才能在服务器上进行查找,即使我在客户端已经有了这两个对象?
我对解决方案的简单性感到尴尬,但它就在这里。由于Mongoose会在内部将一个有效的十六进制对象ID字符串强制转换为Mongoose.Schema.ObjectId,我可以简单地替换
basket.lotions.push(lotion);
带有
basket.lotions.push(lotion._id);
然后MEANJS和Mongoose为我完成剩下的繁重工作。很简单。。。我只花了几天时间就弄清楚了:/