2016-10-14 89 views
0

在我的node.js應用程序中,我正在實現「記住我」功能。目前爲止一切都很順利,但是我對貓鼬有問題。我想做什麼:我有一個與此架構命名Token型號:找到一個元素,使用數據,然後刪除它

var TokenSchema = mongoose.Schema({ 
    token: { type: String }, 
    uid: { type: Schema.Types.ObjectId, ref: 'User' } 
}); 

這是一個簡單的cookie標記映射到userid的一個小集合。然後,我有這個功能在這裏:

function consumeRememberMeToken(token, fn) { 
    Token 
    .findOne({ 'token': token }, (err, result) => { 
    return (result===null)?fn(null, null):fn(null, result.uid); 
    }) 
    .remove(); 
} 

它應該做的,是這樣的:找到uid對於給定token字符串並返回它(如果有一個結果)。 但是,此函數也應該在返回uid後刪除該條目。

目前,該uid從發現令牌result才能正確返回,但它(結果令牌)並沒有得到與上面的代碼集合中刪除。我不明白如何在獲取它並使用檢索到的uid後立即將其刪除。我對函數式編程完全陌生,我不明白如何以及在何處刪除令牌。

回答

0
Token.findOne({ 'token': token }, (err, result) => { 
    if(err || !result) return fn(err || "error", null); 
    else{ 
     var uid = result.uid; 
     result.remove(function(){ 
     return fn(null, uid); 
     }); 
    } 
}) 
+0

對不起,但這不起作用... uid得到返回但令牌不會被刪除。換句話說:在運行上述操作之後,現在有2個條目具有相同的* uid *,但集合中具有不同的標記字符串。每次通話都添加一個條目。 – Robert

+0

在刪除回調中添加錯誤參數並檢查它,result.remove(function(error){console.log(error); – Dafuck

1

您可以嘗試db.collection.findOneAndDelete它刪除文檔並返回被刪除的數據,你在說什麼的完全相反,但基本上成爲你的目的。詳細信息請參閱here

另外here是相同的貓鼬表示。

相關問題