2016-06-14 31 views
0

我有一個簡單的問題(對於你比我更瞭解的,就是..)關於我的註冊控制器的代碼。 我正在嘗試在新用戶在我的網站上註冊時檢查現有用戶名的數據庫。我將提供下面的代碼。提前致謝!檢查數據庫的現有用戶名MEAN Stack

app.controller('SignupController', function ($scope, $http, $window) { 

     $scope.submitSignup = function() { 
      var newUser = { 
       username: $scope.username, 
       password: $scope.password 
      }; 

      if (newUser.username == db.users.username) { 
       alert('Username is already taken.'); 
      } 

      if ($scope.submitsignup.$valid) { 
       $http.post('/users', newUser).then(function() { 
        $window.location.href = '/#'; 
        alert('Your account has been created!'); 
       }); 
      } 
      else { 
       alert('You messed something up brotha...'); 
      } 
     }}); 

注意:在瀏覽器中的控制檯說沒有定義數據庫。

這是我如何從我的server.js文件中的數據庫中獲取用戶。

app.get('/users', function (req, res, next) { 
     db.collection('users', function (err, usersCollection) { 
      usersCollection.find().toArray(function (err, users) { 
       return res.json(users); 
      }); 
     }); 
}); 
+0

你的db變量來自哪裏? – Cole

+0

這只是我與代碼的混搭,我真的不知道我在做什麼 –

回答

0

首先,我建議你考慮使用節點模塊passport辦理註冊和signins。這非常有用。

在控制檯端,問題非常簡單 - 您無法訪問您在server.js中使用的db變量。它沒有在前端定義,所以它沒有任何意義。

現在,您有a解決方案在這裏與app.get('/users'),因爲該代碼將發送一個列表中的所有用戶從數據庫到前端。我認爲這不是一個好習慣,因爲如果你有很多用戶,需要發送大量信息。 但是,如果您將支票放入您的http.get()請求中,它將起作用

$http.get('/users').then(function(result){ 
    if(result.users.find(newUser.username)){ 
     alert('Username is taken!'); 
    } else { 
     //continue working 
    } 
} 

這應該工作,但它是相當效率低下。你應該改變你的app.get參加paramquery並返回一個布爾值,如果它在你的數據庫中找到的話。

+0

感謝護照上的提示,我會立即使用它。還要感謝你在這裏的代碼示例,我只是跟着一個人在YouTube上一步一步地講,但是API有這麼多的缺陷,它幾乎令人難以置信。無論如何,謝謝你的時間。 –

相關問題