[英]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是否有可能正在缓存结果并花一些时间来更新缓存?
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,也尝试使用缓存无效的querystring参数,并且再次检查了mongoDB配置,并且未使用复制或延迟写入。 不幸的是,就像我说的那样,它在localhost和某些计算机/连接上运行良好,但在其他计算机/连接上却无法正常运行。
最有可能的是,您可能正在获取GET
请求的缓存版本...如果必须具有最新数据,请使用cache-busting querystring参数或使用其他方法( POST
)等。您应设置缓存头适当。
另外,如果您在MongoDB中使用复制或通过配置延迟写入,则您的后续请求可能会获取过时的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.