2016-09-29 72 views
0

我正在制作一个使用Yelp API和MEAN堆栈的场地搜索应用程序。在使用Passport JS登录Facebook之后,您可以添加和移除自己去场馆。在Node/Express中Passport JS登录后没有刷新页面和搜索?

在这种情况下用户输入的搜索,结果页面上显示(为未认证用户),登录并重定向到了主页,搜索结果被刷新。

我想的是,用户不必重新搜索。所以基本上没有刷新页面,也没有在Angular中刷新$ scope.venues,这是一个持有所有场地数据的对象。

例如:

  • 我搜索阿姆斯特丹
  • 我得到的所有场馆的名单在阿姆斯特丹
  • 我登录
  • 阿姆斯特丹的搜索结果仍然存在

我该怎么做?

这些都是在节点/快递护照JS路线:

var passport = require('passport'); 

var FacebookStrategy = require('passport-facebook').Strategy; 

var session = require('express-session'); 

passport.serializeUser(function(user, done) { 

done(null, user); 

}); 

passport.deserializeUser(function(id, done) { 

done(null, id); 

}); 

app.get('/auth/facebook', passport.authenticate('facebook')); 
//Authenticate with Passport when hitting this route 

app.get('/auth/facebook/callback', passport.authenticate('facebook', { 
//Handle callback after successfully authenticated woth Facebook 

successRedirect: '#/reload/' + searchQuery, 
failureRedirect: '/error' 

})); 

这是我在角:

angular.module("popperooApp", ['ngRoute']) 
    .config(function($routeProvider) { 
    $routeProvider 
     .when("/", { 
     templateUrl: "list.html", 
     controller: "ListController" 
     }).when("/reload/:query", { 

     templateUrl: "list.html", 
     controller: "ReloadController" 

    }) 
     .otherwise({ 

     redirectTo: "/" 

     }); 
    }) 
    .service("Venues", function($http) { 

    this.getVenues = function(location) { 

     var url = "search/" + location; 

     return $http.get(url); 

    }; 


    }) 
    .controller('ListController', function($scope, Venues) { 

    $scope.searchLocation = function(location) { 

     Venues.getVenues(location) 
     .then(function(response) { 

      $scope.venues = response.data; 

     }, function(response) { 

      alert("Error retrieving venues"); 

      console.log(response); 

     }); 

    }; 

    }) 
    .controller('ReloadController', function($scope,Venues,$routeParams){ 

     Venues.getVenues($routeParams.query) 
      .then(function(response){ 

       $scope.venues = response.data; 

      }, function(response){ 

       alert("Error retrieving venues"); 

       console.log(response); 

      }); 


}) 

我应该存储在会话MongoDB的数据库?我不应该在Angular中重定向到'/'路线并进行自定义吗?

感谢您的帮助!

回答

0

你应该重定向到一个搜索URL像你已经能够实现的,无需存储会话上的信息。

我觉得你的情况最好的办法是将用户重定向到当前加载的页面,所以它不仅适用于搜索。

它,当然,假设你可以通过这个网址和应用程序访问你的应用程序将自动重新加载基于URL的搜索结果。

祝你好运。

+0

谢谢!我尝试使用$ routeParams与新的ReloadController,但得到以下错误:FacebookTokenError:此授权码已被使用。可能是什么问题呢? – chemook78