2016-02-29 31 views
0

我正在使用MEAN堆棧在Node中創建登錄腳本。目前我可以搜索數據庫並找到用戶。然而,我找到用戶後,我試圖打開一個鏈接到索引頁面,但是當我的代碼執行什麼都沒有發生。有誰知道如何通過路線打開鏈接?如何使用Express和AngularJS使用請求打開新鏈接

client.js

var app = angular.module('myApp',[]); 
app.controller('loginController',function($scope,$http) { 
     $scope.login = function(username,password) { 
     var objectJson = {'username':username,'password':password}; 
     $http.post('/loginRequest',objectJson).success(function(response) { 
     console.log("response: "+response); 
     }); 
    }; 
}); 

server.js

// Listen for Seach collection request 
router.post('/loginRequest', function (req, res, next) { 
    var databaseName = "DB", collection = "Accounts"; 
    var username = req.body.username, password = req.body.password; 
    var db = new Db(databaseName, new Server('localhost', 27017)); 
    db.open(function (err, db) { 
     //var cursor = db.collection(collection).find({ "username":username,"password": password }); 
     // cannot apply cursor methods to the result of findOne() because a single document is returned. 
     db.collection(collection).findOne({ "username": username, "password": password }, function (err, doc) { 
      assert.equal(null, err); 
      if (doc != null) { 
       console.log("Found"); 
       res.render('index', { title: 'Home Page', message: 'Message'}); 
      } 
      db.close(); 
     }); 
    }); 
}); 

回答

1

這是一個AJAX調用,你需要用JSON迴應,但您使用的是發送一個HTML res.render()。

角:

var app = angular.module('myApp', []); 
app.controller('loginController', function($scope, $http) { 
    $scope.login = function(username, password) { 
    var objectJson = { 
     'username': username, 
     'password': password 
    }; 
    $http.post('/loginRequest', objectJson).success(function(response) { 
     location.href = '/'; 
    }, function() { 
     alert('Invalid credentials'); 
    }); 
    }; 
}); 

節點:

// Listen for Seach collection request 
router.post('/loginRequest', function(req, res, next) { 
    var databaseName = "DB"; 
    var collection = "Accounts"; 

    var username = req.body.username; 
    var password = req.body.password; 

    var db = new Db(databaseName, new Server('localhost', 27017)); 
    db.open(function(err, db) { 
    db.collection(collection).findOne({ 
     "username": username, 
     "password": password 
    }, function(err, doc) { 
     if(err) { 
     throw err; 
     } 

     if (doc) { 
     // Here also you need to set logged state in req.session 
     // https://github.com/expressjs/session 
     res.json(doc); 

     } else { 
     res.status(400).json(); 
     } 

     db.close(); 
    }); 
    }); 
}); 
+0

如何我只要打開網頁玉,而不是寫出來的代碼location.href = 「/」 的; – John

+0

什麼?我認爲你真的在這裏混合關注...你需要使用location.href重定向到記錄的路徑。同樣重要的是要注意,你從來沒有在會話中保存「記錄」狀態,如:req.session.user = doc或者其他。 – neiker

+0

是的,你是對的。出於某種原因,我擔心通過AngularJS將鏈接發送給客戶端,但考慮到這一點,沒有什麼可擔心的。 – John

相關問題