我有以下的模型,假設它描述了一本書:Sails.js/waterline:在模型的toJSON函數中執行水線查詢?
module.exports = {
attributes: {
name: {
type: 'String',
required: true
},
type: {
type: 'string',
required: true
},
book_id: {
type: 'integer'
}
}
}
這裏的「類型」屬性是書籍的類型,例如HorrorBook。我有一個單獨的HorrorBooks,FantasyBooks等模型,因爲模型的結構彼此不同,它們有其他領域沒有的領域等,這就是爲什麼我不能只使用一個通用的Book-模型。 HorrorBook,FantasyBook等都有自己的'id'字段,這意味着可以同時存在HorrorBook和FantasyBook。在創建這本書時,我有一個beforeCreate函數,它還根據本書的'type'屬性在HorrorBook或FantasyBook中創建一個條目。
我想要做的是從前端對Book進行查詢時,我想將這本書的相關信息包含在'information'屬性中,例如HorrorBook條目。
toJSON: function() {
var obj = this.toObject();
switch (obj.type) {
case 'HorrorBook':
HorrorBook.find({id: obj.book_id})
.exec(function(err, book_info) {
obj.book_info = book_info;
return obj;
})
}
}
但是,這導致toJSON只是返回null。我所假設的是,查詢是異步的,這使得它太慢或者什麼,所以它根本不會進行「返回」調用。那麼我該怎麼做呢?有什麼方法可以在我所嘗試的方法中取得成功,還是應該以某種方式改變我的方法?
我無法理解在哪裏以及如何使用第二個代碼段。你能詳細說明一下嗎? – Fissio
Fissio,第二個片段用於當前調用'.toJSON()'並獲得'null'的地方。 'book'表示您使用'.find()'從數據庫中檢索到的記錄。 –
啊,我明白了 - 這很遺憾並不能解決我的問題,因爲我從前端發出一個類似'localhost:1337/Book?type = HorrorBook&id = 1'的請求,因此無法執行查詢那裏。對不起,我以前不清楚我的情況。 – Fissio