我想要做的事:
將數據發送到節點,具有節點將它保存在MongoDB中,並且當它這樣做 - 發送一個迴應說它的工作。然後通過節點從mongoDB獲取角度爲http.get()
的數據。數據實時更新在本地主機,但不要對正在服務器(節點JS +的MongoDB)
問題:
這是我所有的本地機器上運行完美,但不是我的服務器上。在我的服務器上,我收到一條迴應,說數據已成功保存,我甚至可以直接在命令行中用mongo cli檢查數據庫,並在那裏看到數據。但是它需要刷新幾頁,或者在最近的帖子實際顯示之前的大約30秒。
如果我有過去的多篇文章,並且我發了一篇新文章,節點查詢mongoDB並返回大約30秒前和之前的所有帖子,所以只有最近保存的數據才顯示出來。同樣,我的本地機器上並不是這種情況,我可以立即獲取所有數據。
所以,我只是想知道是否有人經歷過這個,或知道它爲什麼會發生?爲什麼mongo CLI會立即向我顯示最新數據,同時通過角度http向節點路由發出請求會在數據保存後返回約30-60秒的舊結果?是否有可能節點或mongo緩存結果並需要一段時間來更新緩存?
我的設置:
本地計算機
- OSX - 10.10
- 節點 - v0.10.33
- 的MongoDB - 2.6.4
服務器:
- 的CentOS - 6.5版(最終)
- 節點 - v0.10.33
- 的MongoDB - 2.6.4
node.js的保存數據在MongoDB中:
var order = {
size: safePostData.size,
toppings: safePostData.toppings,
//etc...
};
db.pizza.update({
authToken: <user authentication goes here>
},
{
$addToSet: {
orders: order
}
}, function(err, updated) {
if (err || !posted) {
res.send({status: false, stackTrace: 'placing order', msg: 'order failed'});
} else {
res.send({status: true, stackTrace: 'placing order', msg: 'order was placed'});
}
});
angular.js從服務器獲取數據:
angular.module('fakePizzaExample')
.factory('userData', userData);
userData.$inject = ['$http'];
function userData(http) {
var homeData = {};
var refreshData = function(callback) {
http.get('<URL TO ROUTE ON NODE SERVER>')
.success(function (data, status, headers, config) {
homeData = data;
if (typeof callback !== 'undefined') {
callback(data);
}
})
.error(function (data, status, headers, config) {
console.log(data);
});
};
refreshData();
return {
get: function() {
return homeData;
},
refresh: function(callback) {
return refreshData(callback);
}
};
}
node.js將數據發送回角:
更新:
我有我的朋友登錄到服務器,看他是否有同樣的延遲的,結果,他沒有。顯然,在使用實時服務器時,它的工作正如他所料。這至少令我感到困惑。
更新2:
按@ Tracker1的建議下,我用的不是GET POST試過,我也嘗試過使用緩存清除查詢參數,我仔細檢查了我的MongoDB的配置,我沒有使用複製或延遲寫入。不幸的是,就像我說的,它在本地主機和某些計算機/連接上運行良好,但不是其他計算機/連接。
設置緩存標題,並嘗試'POST'方法沒有改變任何東西,我沒有使用複製或延遲寫入...... :(這些都是偉大的想法,雖然。 – EmmaGamma 2014-11-26 22:03:22