我想做的是:
将数据发送到节点,让节点将其保存在mongoDB中,并在完成时发送一个响应,说明它工作正常。然后通过节点从mongoDB获取带有角的mongoDB的数据。
问题是:
这一切都在我的本地机器上完美地运行,但在我的服务器上却没有。在我的服务器上,我得到一个响应,表示数据已成功保存,我甚至可以使用mongo直接在命令行中检查数据库,并在那里看到数据。但这需要几个页面刷新,或大约30秒后,最近的帖子才能真正出现。
如果我有来自过去的多个帖子,并且我做了一个新的帖子,Node查询mongoDB并返回大约30秒之前的所有帖子,所以只有最近保存的数据才不会出现。同样,在我的本地机器上也不是这样,我会立即得到所有的数据。
所以,我只是想知道是否有人经历过这种情况,或者知道为什么会发生这种情况?为什么mongo会立即向我显示最新的数据,同时通过角http向节点路由发出请求,在保存数据后30到60秒内返回旧结果?是否有可能节点或mongo正在缓存结果并需要一段时间来更新缓存?
我的装备:
局部机器
服务器:
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 1的建议,我尝试使用POST而不是GET,我也尝试使用一个破坏缓存的查询字符串参数,并且我再次检查了我的mongoDB配置,并且我没有使用复制或延迟写。不幸的是,就像我说的,它在本地主机和一些计算机/连接上运行得很好,但在其他计算机/连接上却不起作用。
发布于 2014-11-20 23:56:29
最有可能的是,您可能会得到GET请求的缓存版本.如果您必须拥有最新的数据,可以使用一个破坏缓存的查询字符串参数,或者使用一个不同的方法(POST)等等。您应该适当地设置缓存头。
此外,如果在MongoDB中使用复制或通过配置延迟写入,则后续请求可能会收到陈旧的数据。
https://stackoverflow.com/questions/27050102
复制相似问题