2015-07-28 107 views
1

我正在爲某些模式上的'查找'查詢實現某種緩存,而我的緩存與pre \ post查詢掛鉤一起工作。如何在'預'鉤子中取消貓鼬查詢

問題是我該如何正確取消'查找'查詢?

mySchema.pre('find', function(next){ 
    var result = cache.Get(); 

    if(result){ 
     //cancel query if we have a result from cache 
     abort(); 
    } else { 
     next(); 
    } 
}); 

讓這個承諾能夠實現嗎?

Model.find({..}) 
     .select('...') 
     .then(function (result) { 
      //We can reach here and work with the cached results 
     }); 

回答

1

我無法找到一個合理的解決這個我自己來說又非緩存的原因,但如果你自己特定的緩存方法是不是太重要了,我建議你看mongoose-cache,運作良好,並具有簡單感謝它的依賴:node-lru-cache,檢查出更多的選項。

0

你可能想檢查貓鼬驗證器,這似乎是一個更好的方法來處理控制是否創建一個對象。

您可以創建一個自定義的驗證函數,該函數將在Model.save函數中引發錯誤,導致它失敗。這裏是來自文檔的代碼片段:

// make sure every value is equal to "something" 
function validator (val) { 
    return val == 'something'; 
} 
new Schema({ name: { type: String, validate: validator }}); 

// with a custom error message 

var custom = [validator, 'Uh oh, {PATH} does not equal "something".'] 
new Schema({ name: { type: String, validate: custom }}); 

// adding many validators at a time 

var many = [ 
    { validator: validator, msg: 'uh oh' } 
    , { validator: anotherValidator, msg: 'failed' } 
] 
new Schema({ name: { type: String, validate: many }}); 

// or utilizing SchemaType methods directly: 

var schema = new Schema({ name: 'string' }); 
schema.path('name').validate(validator, 'validation of {PATH} failed with value {VALUE}'); 

發現這裏,如果你想更多地瞭解它。希望能幫助別人!

http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate