gpt4 book ai didi

javascript - 数据在本地主机上实时更新,但不在实时服务器上(Node js + MongoDB)

转载 作者:行者123 更新时间:2023-12-03 11:22:17 26 4
gpt4 key购买 nike

我想做的事情:

将数据发送到 Node ,让 Node 将其保存在 mongoDB 中,完成后 - 发送一个响应说它有效。然后使用 Angular 的 http.get() 通过 Node 从 mongoDB 获取该数据。

问题:

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

如果我过去有多个帖子,并且我发布了一个新帖子,Node 会查询 mongoDB 并返回大约 30 秒前及之前的所有帖子,因此只有最近保存的数据不会显示。同样,在我的本地计算机上情况并非如此,我可以立即获取所有数据。

所以,我只是想知道是否有人经历过这种情况或者知道为什么会发生这种情况?为什么 mongo CLI 会立即向我显示最新数据,而通过 Angular http 向 Node 路由发出请求会在数据保存后约 30-60 秒内返回旧结果?是否有可能 Node 或 mongo 正在缓存结果并需要一段时间才能更新缓存?

我的设置:

本地计算机

  • OSX - 10.10
  • Node - v0.10.33
  • MongoDB - 2.6.4

服务器:

  • CentOS - 版本 6.5(最终版)
  • Node - 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 将数据发送回 Angular:

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 });
}
});
<小时/>

更新:

我让我的一个 friend 登录服务器,看看他是否有同样的延迟结果,他没有。显然,在使用实时服务器时,它按预期工作。至少可以说,这真的让我很困惑......

更新 2:

根据@Tracker1的建议,我尝试使用POST而不是GET,我还尝试使用缓存清除查询字符串参数,并且我仔细检查了我的mongoDB配置,并且我没有使用复制或延迟写入。不幸的是,就像我说的,它在本地主机和某些计算机/连接上运行良好,但在其他计算机/连接上运行良好。

最佳答案

最有可能的是,您可能会获得 GET 请求的缓存版本...如果您必须拥有最新数据,请使用缓存清除查询字符串参数,或使用不同的方法( POST)等。您应该适本地设置缓存 header 。

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

关于javascript - 数据在本地主机上实时更新,但不在实时服务器上(Node js + MongoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27050102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com