将数据发送到节点,让节点将其保存在mongoDB中,并在完成后发送一个响应,说明它有效。然后通过节点从mongoDB中获取角度为http.get()
的数据。
这一切都在我的本地机器上完美运行,但不在我的服务器上运行。在我的服务器上,我得到一个回复说数据已成功保存,我甚至可以直接在命令行中使用mongo cli检查数据库,我在那里看到数据。但它需要几次页面刷新,或者在最近的帖子实际显示之前大约30秒。
如果我有过去的多个帖子,并且我发了一个新帖子,Node会查询mongoDB并返回大约30秒前和之前的所有帖子,因此只显示最近保存的数据。同样,在我的本地机器上不是这种情况,我立即得到所有数据。
所以,我只是想知道是否有人经历过这个或知道为什么会发生这种情况?为什么mongo CLI会立即向我显示最新数据,而通过angular http向节点路由发出请求会在保存数据后大约30-60秒返回旧结果?是否可能节点或mongo正在缓存结果并花费一些时间来更新缓存?
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.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);
}
};
}
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 });
}
});
我有一个朋友登录到服务器,看看他是否有相同的延迟结果,他没有。显然,当使用实时服务器时,它正如预期的那样工作。至少可以说这真让我感到困惑......
根据@ Tracker1的建议,我尝试使用POST而不是GET,我也尝试使用缓存破坏查询字符串参数,我仔细检查了我的mongoDB配置,我没有使用复制或延迟写入。不幸的是,就像我说的那样,它在localhost和某些计算机/连接上工作正常,但在其他计算机/连接上却没有。
答案 0 :(得分:1)
最有可能的是,您可能正在获得GET
请求的缓存版本...如果您必须拥有最新鲜的数据,请使用缓存清除查询字符串参数,或使用其他方法({{1你应该适当地设置缓存头。
此外,如果您在MongoDB中使用复制或通过配置使用延迟写入,则后续请求可能会收到陈旧数据。