在本地主机上实时更新数据,但不在实时服务器上更新(Node js + MongoDB)
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 会立即向我显示最新数据,而通过 angular http 向节点路由发出请求会在保存数据后返回大约 30-60 秒的旧结果?节点或 mongo 是否有可能缓存结果并需要一段时间来更新缓存?
我的设置:
本地计算机
- OSX - 10.10
- 节点 - v0.10.33
- 蒙戈数据库 - 2.6.4
服务器:
- CentOS - 版本 6.5 (最终版)
- 节点 - v0.10.33
- 蒙戈数据库 - 2.6.4
节点.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'});
}
});
角度.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);
}
};
}
节点.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 });
}
});
更新:
我让我的一个朋友登录服务器,看看他是否有同样的延迟结果,他没有。显然,在使用实时服务器时,它按预期工作。至少可以说,这真的让我感到困惑...
更新 2:
根据@Tracker1的建议,我尝试使用 POST 而不是 GET,我还尝试使用缓存破坏查询字符串参数,并且我仔细检查了我的 mongoDB 配置,我没有使用复制或延迟写入。不幸的是,就像我说的,它在本地主机和某些计算机/连接上运行良好,但在其他计算机上无法正常工作。
最有可能的是,您可能会获得GET
请求的缓存版本...如果必须拥有最新的数据,请使用缓存无效化查询字符串参数,或使用其他方法(POST
)等。 您应该适当地设置缓存标头。
此外,如果您在 MongoDB 中使用复制或通过配置延迟写入,则后续请求可能会获取过时数据。
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- Node.js错误“;ReferenceError:全局未定义“;在从0.10.2更新到0.12.2之后
- 如何在不重新加载URL的情况下查询Node.Js的后端并更新页面
- 使用 node.js 和 javascript 更新 HTML 对象
- Node/Express 无法正确更新数据模型
- 更新数组中的嵌入文档 - Mongodb + Node Driver
- Node js redis socket.io pubsub实时更新
- 通过ajax和url更新页面,而无需重新加载页面(node.js)
- 如何更新服务器's的内容而不重新启动?(node.js)
- 如何使用Node.js和Express不断更新页面数据
- JSON值使用process.env[node.js]动态更新
- 使用node.js更新和删除按钮
- 使用express和node.js更新mongodb中的单个记录
- 客户端未使用 Socket.io 和 Node.js 实时更新
- 如何对node进行纯javascript调用.js它将通过websockets更新仪表板
- 在 Node JS 中使用 fs-extra 更新 xml 文件
- 在本地主机上实时更新数据,但不在实时服务器上更新(Node js + MongoDB)
- 正在更新数据库中的对象?(Node.js w/Mongoose)
- Couchdb's更新Node.js中的事件处理程序
- 从Node.js在MySQL中更新-如何判断是否影响零行