2012-06-25 110 views
0

我使用expresso.js與貓鼬作爲ODM。貓鼬不更新數據庫條目

我知道當其他服務器對mongoDB進行更新時,貓鼬不會識別這個。所以仍然顯示數據庫的舊狀態。

我認爲這是因爲貓鼬在創建,更新新文檔後使用回調來更新,但是當另一個服務與mongoDB交互時,這個回調不會被觸發。

那麼我怎麼能說manongly來照顧沒有自己創建的文件?

路線/ user.js的

var User = require('../models/user.js') 
, requirements = { enabled: true, expired: false, locked: false }; 

exports.list = function(req, res){ 
    User.find(requirements, function(err, users){ 
     res.send(users); 
    }); 
}; 

app.js

app.get('/users', user.list); 

當我現在訪問/用戶,捲曲或我得到所有用戶的陣列的瀏覽器在mongodb。這就是直到現在。現在我通過我的PHP環境註冊一個新用戶。當我現在再次請求/用戶時,如果沒有php創建的用戶,我仍然會得到與之前相同的數組!

當我現在PHP創建用戶再次重新啓動節點服務和請求/用戶是有....

+0

您關於Mongoose API的斷言並不總是反映數據庫的當前狀態是不正確的。以前的查詢結果不會反映自查詢執行以來對數據庫所做的任何外部更改,當然,任何新的find查詢肯定會發生。你關心的具體情況是什麼? – JohnnyHK

+0

我已更新我的問題。 –

+1

聽起來像這個問題可能是express.js中的視圖緩存。你可以嘗試'app.disable('view cache');'看看是否是這種情況。 – Stennie

回答

0

的express.js框架包括被默認爲生產基地啓用視圖緩存)。我懷疑你的成績越來越緩存,因爲你已經包括函數引用(user.list),而不是一個封閉,如:

app.get('/users', function(req, res){ 
    User.find(requirements, function(err, users){ 
     res.send(users); 
    }); 
}); 

的視圖緩存是一個全局設置,只應緩存視圖模板,不視圖的內容。有一個more granular caching的請求,但它看起來像這不是必需的。

您可以嘗試使用禁用的視圖緩存:

app.disable('view cache'); 

一個很好的資源搜索或要求澄清將是Express.js Google Group