我想要做的事:
将数据发送到节点,具有节点将它保存在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