首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地主机上的数据实时更新(Node + MongoDB)

本地主机上的数据实时更新(Node + MongoDB)
EN

Stack Overflow用户
提问于 2014-11-20 21:41:48
回答 1查看 1.4K关注 0票数 0

我想做的是:

将数据发送到节点,让节点将其保存在mongoDB中,并在完成时发送一个响应,说明它工作正常。然后通过节点从mongoDB获取带有角的mongoDB的数据。

问题是:

这一切都在我的本地机器上完美地运行,但在我的服务器上却没有。在我的服务器上,我得到一个响应,表示数据已成功保存,我甚至可以使用mongo直接在命令行中检查数据库,并在那里看到数据。但这需要几个页面刷新,或大约30秒后,最近的帖子才能真正出现。

如果我有来自过去的多个帖子,并且我做了一个新的帖子,Node查询mongoDB并返回大约30秒之前的所有帖子,所以只有最近保存的数据才不会出现。同样,在我的本地机器上也不是这样,我会立即得到所有的数据。

所以,我只是想知道是否有人经历过这种情况,或者知道为什么会发生这种情况?为什么mongo会立即向我显示最新的数据,同时通过角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中:

代码语言:javascript
复制
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从服务器获取数据:

代码语言:javascript
复制
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将数据发送回角:

代码语言:javascript
复制
db.users.findOne({
  authToken: <user authentication goes here>
}, function(err, found) {
  if (err || !found) {
    res.send( { status: false, stackTrace: 'find user', msg: 'No user found' } );
  } else {
    userData = found;
    res.send({ status: true, stackTrace: 'find user', msg: userData });
  }
});

更新:

我让我的一个朋友登录到服务器上,看看他是否有同样的延迟结果,但他没有。显然,当他使用实时服务器时,它就像预期的那样工作。这至少让我很困惑..。

更新2:

根据@Tracker1 1的建议,我尝试使用POST而不是GET,我也尝试使用一个破坏缓存的查询字符串参数,并且我再次检查了我的mongoDB配置,并且我没有使用复制或延迟写。不幸的是,就像我说的,它在本地主机和一些计算机/连接上运行得很好,但在其他计算机/连接上却不起作用。

EN

回答 1

Stack Overflow用户

发布于 2014-11-20 23:56:29

最有可能的是,您可能会得到GET请求的缓存版本.如果您必须拥有最新的数据,可以使用一个破坏缓存的查询字符串参数,或者使用一个不同的方法(POST)等等。您应该适当地设置缓存头。

此外,如果在MongoDB中使用复制或通过配置延迟写入,则后续请求可能会收到陈旧的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27050102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档