[英]Nested Schemas with Custom Objects in Mongoose for Node.js
我一直試圖在我的簡單Node.js應用程序中使用Mongoose。 我在對象中創建了幾個自定義對象,這些對象基本上實現了鏈表數據結構。 我已經能夠成功保存對象,但是當我嘗試檢索對象並調用為它定義的某些方法時,問題就來了。 我嘗試使用Object.create()作為解決方法,但這沒有用。 這是代碼失敗的地方:
UserObj.findOne( { username : username } ).exec( function(err, user) {
if(err) {
res.status(404).json( {success: false, message: "Database error"} );
return;
}
if(user == null) {
res.status(404).json( {success: false, message: "Username not Registered"} );
return;
}
var sq = Object.create(MusicQueue, user.songQueue); // Not sure if im supposed to pass in MusicQueue or MusicQueue.prototype. Neither work though
var pl = sq.getPlaylist();
res.json({
username : username,
lastLogin : user.lastLogin,
playlist : pl
});
});
這是我得到的錯誤:
var pl = sq.getPlaylist();
^
TypeError: Object object has no method 'getPlaylist'
我確實在MusicQueue對象中定義了該方法作為原型的一部分( MusicQueue.prototype.getPlaylist = function() {...};
)。
關於如何解決這個問題的任何想法? 有沒有一種方法可以將user.songQueue從通用對象轉換為MusicQueue對象,並能夠調用其實例方法?
您的User
架構應按以下方式定義:
userSchema.methods.getPlayList = function () {
// * your function*, might need a callback if async...
};
var User = mongoose.Model('User', userSchema);
您可以使用以下方法添加static
方法:
userSchema.statics.getUsersById = function(cb) {
// * do something, and call cb when done, assuming it's async
};
您不應該使用prototype
添加方法。 貓鼬將為調用findOne
結果創建User
模型的實例,並且getPlayList
函數(如上所示正確定義)將可用(它已添加到原型中)。
您在評論中提到了鏈接列表。 您可以這樣做:
var nodeSchema = mongoose.Schema({
value: String,
link: { type: mongoose.Schema.Types.ObjectId, ref: 'Node' }
});
var Node = mongoose.Model('Node', nodeSchema);
我只是通過為我的對象創建copy(obj)
方法來解決我的特殊情況,該方法將使用findOne(...)
方法返回的對象並將其中的數據復制到我的對象中。 因此,我提出了其他問題,但是我很確定它們與該問題無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.