Node.js / Expressjs 不清除会话

Node.js / Expressjs do not clear session

应用程序在开始时通过 Angularjs / $http.get() 加载一些用户,然后向下滚动加载更多(无限滚动)。

该页面还有一些位置过滤器,因此用户可以选择不同的国家和城市以仅查看来自该位置的用户。

控制器是这样的:

$scope.country;
$scope.city;
$scope.users = [];
$scope.busy = false;
$scope.destroy = null;

$scope.nextPage = function() {
  if ($scope.busy) return;
  $scope.busy = true;

  $http.get('/users', {
    params: {
      destroy: $scope.destroy,
      country: $scope.country,
      city: $scope.city
    }
  }).success(function(res) {
    var users = res.users;
    for (var i = 0; i < users.length; i++) {
      $scope.users.push(users[i]);
    }
    $scope.busy = false;
    $scope.destroy = null;
  }).error(function() {
    alertify.error('Error loading Escorts');
  });
};

这是在同一个控制器中处理位置变化的代码:

$scope.$on('handleLocationBroadcast', function() {
  $scope.country = SharedLocationService.country;
  $scope.city = SharedLocationService.city;
  $scope.destroy = 'destroy';
  $scope.users = [];
  $scope.nextPage();
});

服务器端我使用的是 Expressjs / Node,控制器非常简单:

exports.getUsers = function(req, res) {
    // If parameter destroy is 'destroy' then clear the session.skip.
    if (req.query.destroy === 'destroy') req.session.skip = [];

    // set skip with session or empty array (need for the first call)
    var skip = req.session.skip || [];

    // set locations (I use to store also the location in a session for future calls
    var country = req.query.country || req.session.country || { $ne: '' };
    var city = req.query.city || req.session.city || { $ne: '' };

    // Get users
    User.find({ '_id' : { '$nin': skip }})
    .where( { 'location.country' : country, 'location.city' : city } )
    .sort({ _id: -1 })
    .limit(15)
    .exec(function(err, users) {

    if (err) res.json({ 'msg': 'Error loading users' });

    for (var i = 0; i < users.length; i++) {
        skip.push(users[i]._id);
    }

    req.session.skip = skip;

    res.json({
      users: users
    });

  });
};

在我更改位置之前,一切似乎都非常顺利。

当我更改位置时,会话似乎已正确清除,但当我向下滚动以呼叫其他用户时,我发现会话尚未清除,这导致用户加载严重不足。

因此,如果我正在浏览来自英国所有城市的用户,并且我选择仅在更改位置时切换到伦敦,它会清空用户数组,正确加载 15 个用户,但向下滚动时它不再加载 few出现在上一个会话中并查看会话日志的用户我收到了整个列表。

我该如何解决这个问题?

谢谢

好吧,我自己解决了这个问题 POST 请求在再次调用之前清除更改位置的会话 $scope.nextPage();

基本上代码如下:

$scope.$on('handleLocationBroadcast', function() {
  $scope.country = SharedLocationService.country;
  $scope.city = SharedLocationService.city;
  $scope.users = [];

  $http({
    url: '/destroy',
    method: 'POST',
    data: { destroy: true }
  }).then(function(res) {
    $scope.nextPage();
  }, function() {
    alertify.error('Error loading users');
  });
}

再向服务器请求一次,是的,但它现在解决了问题。如果有更好的方法,我会很高兴看到它并学到新东西。