7

ページ全体でセッションを維持したいと思います。このプロジェクトでは、サーバー側としてexpressJs、nodeJSを使用しています。フロントエンドの AngularJS。

ビューの変更または URL の変更時にセッションを処理する方法がわかりません。ExpressJS router または angularJs routerの両方を処理する必要があるためです。

どのようなアプローチに従うべきですか?

angularJS ルーター

     myApp.config(['$routeProvider', function($routeProvider) {

    $routeProvider.when('/welcome', {templateUrl: 'partials/welcome.html', controller: 'MyCtrl2'});
    $routeProvider.when('/login', {templateUrl: 'partials/login.html', controller: 'MyCtrl2'});
    $routeProvider.when('/signup', {templateUrl: 'partials/signup.html', controller: 'singupController'});
    $routeProvider.otherwise({redirectTo: '/'});
  }]);

サインアップ コントローラー

myApp.controller('singupController',function($scope,$rootScope,$http){

    $scope.doSingnup = function() {

       var formData = {
          'username' : this.username,
          'password' : this.password,
           'email' : null
      };

      var jdata = JSON.stringify(formData);

      $http({method:'POST',url:'/signup',data:jdata})
      .success(function(data,status,headers,config){

                console.log(data);

      }).
      error(function(data,status,headers,config){

        console.log(data)

      });
    }
  })

ExpressJS ルーター

    module.exports = exports = function(app, db) {

    var sessionHandler = new SessionHandler(db);
    var contentHandler = new ContentHandler(db);

    // Middleware to see if a user is logged in
    app.use(sessionHandler.isLoggedInMiddleware);

    app.get('/', contentHandler.displayMainPage);

    app.post('/login', sessionHandler.handleLoginRequest);

    app.get('/logout', sessionHandler.displayLogoutPage);

    app.get("/welcome", sessionHandler.displayWelcomePage);

    app.post('/signup', sessionHandler.handleSignup);

    app.get('*', contentHandler.displayMainPage);

    // Error handling middleware
    app.use(ErrorHandler);
}

サインアップ後、ログインページにリダイレクトしたいと思います。上記のルーターでそれを行うにはどうすればよいですか。アプリのビューを変更するには、次のどれを使用する必要がありますか
1) angularJS の $location
2) ExpressJS のリダイレクト

4

4 に答える 4

1

サインアップ コントローラー

function SignupCtrl($scope, $http, $location) {
    $scope.form = {}; // to capture data in form 
    $scope.errorMessage = ''; // to display error msg if have any
  $scope.submitPost = function() { // this is to submit your form can't do on
                                    //traditional way because it against angularjs SPA
    $http.post('/signup', $scope.form).
      success(function(data) {    // if success then redirect to "/" status code 200
        $location.path('/');
      }).error(function(err) {   // if error display error message  status code 400
                                 // the form can't be submitted until get the status code 200
        $scope.errorMessage = err;
      });
  };
}

sessionHandler.handleSignup

 this.handleSignup = function(req, res, next) {
        "use strict";
          // if you have a validate function pass the data from your
          // Signup controller to the function in my case is validateSignup
          // req.body is what you need 
        validateSignup(req.body, function(error, data) { 
        if(error) {
            res.send(400, error.message); // if error send error message to angularjs
        }else {
            // do something else
            // rmb to res.send(200) 

        }
    });

}

サインアップの検証

function validateSignup(data,callback) {
        "use strict";   // the data is req.body 
           //so now you can access your data on your form 
           // e.g you have 2 fields name="password" and name="confirmPassword on your form"
          var pass = data.password,
              comPass = data.confirmPassword;
           if(pass != comPass){
               callback(new Error('Password must match'), null); 
                  // then show the error msg on the form by using 
                  //angular ng-if like <div ng-if="errorMessage">{{errorMessage}}</div>
           }else{
               callback(null, data);
            }



  }

この助けを願っています

于 2013-12-08T08:09:21.613 に答える