繁体   English   中英

在Localhost上实时更新数据,但不在Live Server上实时更新(Node js + MongoDB)

[英]Data Updating In Real Time On Localhost But Not On Live Server (Node js + MongoDB)

我正在尝试做的是:

将数据发送到节点,让节点将其保存在mongoDB中,完成后-发送一个响应,说它可以正常工作。 然后通过node从mongoDB中使用angular的http.get()获取该数据。

问题:

这些都可以在我的本地计算机上完美运行,但不能在我的服务器上运行。 在我的服务器上,我收到一条响应,说数据已成功保存,我什至可以直接在命令行中使用mongo cli检查数据库,然后在其中查看数据。 但是,它需要刷新几页,或者大约需要30秒才能真正显示最新的帖子。

如果我有过去的多个帖子,并且发布了一个新帖子,则Node查询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将数据发送回角度:

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的建议,我尝试使用POST而不是GET,也尝试使用缓存无效的querystring参数,并且再次检查了mongoDB配置,并且未使用复制或延迟写入。 不幸的是,就像我说的那样,它在localhost和某些计算机/连接上运行良好,但在其他计算机/连接上却无法正常运行。

最有可能的是,您可能正在获取GET请求的缓存版本...如果必须具有最新数据,请使用cache-busting querystring参数或使用其他方法( POST )等。您应设置缓存头适当。

另外,如果您在MongoDB中使用复制或通过配置延迟写入,则您的后续请求可能会获取过时的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM