2016-02-04 106 views
0

當(在我的情況與藍鳥,但使用的回調說明)使用貓鼬,下面的代碼都從集合返回一個文件:貓鼬:禁用空的查詢返回的文檔

model.findOne({}, function(err, document) { 
    //returns a document 
}) 
model.findOne(null, function(err, document) { 
    //returns a document 
}) 
model.findOne([], function(err, document) { 
    //returns a document 
}) 

我想知道我是否能夠以及如何禁用這種行爲,因爲它會對我的代碼產生負面影響,因爲我推斷用戶向系統提供的數據中的查詢。特別是返回有效文檔的空查詢會讓我感到擔憂。

從現在開始,我檢查輸入是否爲非空,非數組,非空對象,但它的規模變得有點麻煩。

排除此行爲的最佳方法是什麼?

+0

你不應該排在首位信任用戶。由於findOne將一個對象作爲第一個參數,所以至少應該檢查它是否是一個對象。如果傳遞不正確的數據,則無法期待正確的結果。 – Molda

回答

0

不知道這是否是最好的方法去解決它,但現在我已經決定在模型本身上使用pre-hook來檢查'this'對象的_conditions屬性(我推斷它從打印似乎持有查詢對象)不能爲空。

在下一個功能中插入一個自定義對象會導致Promise拒絕其中最初調用查詢的地方。

(_是下劃線包)

//model.js 
//model is a mongoose.Schema type in the following code 

model.pre('findOne', function(next) { 
    var self = this 

    if (_.isEmpty(self._conditions)) { 
    next(mainErrors.malformedRequest) 
    } else { 
    next() 
    } 
})