【发布时间】:2016-01-09 19:15:10
【问题描述】:
我最近开始将我在本地测试过的 Node、mongo、angularjs 网站推送到 DigitalOcean 上托管的实时环境。
我与 ajax/http 调用不一致。在我的本地机器上,我能够执行 http 请求并更新 angularjs 变量,这反过来会填充前端的 html。一切正常!现在在我的服务器上使用相同的环境设置进行测试,变量加载新数据的唯一时间是我刷新页面时。
例如(不是我的实际代码):
Nodejs - app.js:
app.get('/getlist', requiredAuthentication, function(req, res) {
list.find({'username':req.session.user.username}, function(err,list) {
res.send(list);
});});
Angularjs - angular_app.js:
$scope.onClick = function (points, evt) {
$http.get('/getlist').then(function(response) {
$rootScope.list = response;});
};
翡翠家:
li(ng-repeat="row in list")
就像我说的,这在我的本地机器上完美运行,但在我的服务器上我必须刷新我的页面以加载新数据,就好像我的变量被缓存在服务器上一样。
任何想法都会有所帮助。
谢谢!
------- 更新 - 测试 v0.1 --------
所以经过一些密集测试后,这是我发现的,但仍然没有修复。
如果我通过 http 帖子添加新数据,然后查看我的 mongo db,我会看到新数据。然后当我点击 ng-click 通过 HTTP 检索新数据时,它不会返回新数据,而是卡在旧数据上。
如果我让页面打开 10 分钟,然后单击按钮,它会检索新数据,这真是太牛了。
听起来像缓存,但为什么它在我的本地完美运行?
查看控制台时 > 网络 > 状态。它是代码 304,这意味着什么都没有改变?
------- 更新 - 测试 v0.2 --------
我现在已经在控制台中使用日志测试了返回数据,并使用 ajax jQuery 进行了 GET,我遇到了同样的问题/行为,它停留在同一个数据集合上,所以我的结论必须是不是 node.js 导致了问题。
------- 更新 - 测试 v0.3 --------
好的,所以我已经完全停止了 mongo 并使用 node-mysql 将所有内容切换到 mysql。再一次,在我的本地它像一台机器一样工作,而在我的实际服务器上它在读取新数据时很滞后。
我使用 Sequal PRO 访问 mysql 并开始向表中添加新条目。 在浏览器中打开我的网址,它立即显示了新条目。但在那之后,添加新条目或删除条目仅在 10 分钟左右后才显示效果。
所以我的结论是 Nodejs 像妈妈一样缓存,有人知道更多吗?真的只有我一个人经历过吗?
【问题讨论】:
-
您是否检查了开发人员工具的“网络”选项卡中发送的内容?您是否收到了预期的回复?
-
@kraf 我没有得到我想要的响应,当我进行 ajax 调用时,我从 mongodb 获取相关数据。当我添加新数据并再次进行 ajax 调用时,我没有得到新数据,它只检索第一个加载的数据,就好像它已被缓存,直到我刷新页面。
-
我从不这样使用
find。也许试试list.find({'username':req.session.user.username}).toArray(function(err,list) { ... } -
@kraf 抱怨 toArray 未定义
-
你用的是哪个版本的mongodb驱动?我刚刚意识到我的已经很老了。
标签: mysql angularjs node.js mongodb node-mysql