2014-11-20 20 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

相关问题