2014-11-20 21 views
0

我想要做的事:

將數據發送到節點,具有節點將它保存在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的配置,我沒有使用複製或延遲寫入。不幸的是,就像我說的,它在本地主機和某些計算機/連接上運行良好,但不是其他計算機/連接。

回答

1

最有可能的是,您可能會獲得緩存版本的GET請求...如果您必須擁有最新的數據,請使用緩存清除查詢字符串參數或使用其他方法(POST)等。適當地設置你的緩存頭。另外,如果您在MongoDB中使用複製或通過配置延遲寫入,則您的後續請求可能會收到過時的數據。

+0

設置緩存標題,並嘗試'POST'方法沒有改變任何東西,我沒有使用複製或延遲寫入...... :(這些都是偉大的想法,雖然。 – EmmaGamma 2014-11-26 22:03:22

相關問題