【问题标题】:Nodejs on Server Ajax/http calls not reading new data Mongodb服务器 Ajax/http 上的 Nodejs 调用未读取新数据 Mongodb
【发布时间】: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


【解决方案1】:

尝试 res.json 从节点返回数据

app.get('/getlist', requiredAuthentication, function(req, res) 
{
    list.find({'username':req.session.user.username}, function(err,list) 
    {
      res.json(list);
     });
});

【讨论】:

  • .json 很不错,但它不能解决这个问题:)
  • 这肯定是某种缓存问题 :( 我会及时通知大家
  • 您是否尝试在单击检索数据按钮时记录输出?点击后仍然没有日志?可能与 Angularjs 有关,除非您刷新页面,否则 $rootScope 不会更新。很难说是什么导致了服务器和本地主机之间的差异.. @ChristopherBecker
  • @SerhanOztekin 我现在已经在控制台中使用日志测试了返回数据,并使用 ajax jQuery 进行了 GET,我遇到了同样的问题,它停留在同一个数据集合中,所以我的结论一定是 node.js 搞砸了!
【解决方案2】:

我对这个问题的结论是端口 80 以某种方式缓存了页面的内容,并且只会在页面刷新时加载新数据。

我升级了 Node 并使用了最新的 Express。我正在自定义端口上运行我的网络应用程序,现在一切正常。

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 2021-12-12
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多