2016-11-29 95 views
2

我正在使用貓鼬編寫簡單的註冊表單。 我已經使用JavaScript文件來處理註冊表單的值。無法使用貓鼬模型

這裏是我的registrationButtonAction.js

window.onload = function() { 

    var User = require('/models/Mongoose Database/user_database'); 
    // this line is causing the problem 


    var registerButton = document.getElementById("registerMe"); 
    var firstName = document.getElementById("firstName"); 
    var lastName = document.getElementById("lastName"); 
    var usernameRegister = document.getElementById("usernameRegister"); 
    var passwordRegister = document.getElementById("passwordRegister"); 
    var repasswordRegister = document.getElementById("repasswordRegister"); 


    registerButton.onclick = function() { 

     if(!firstName.value || !passwordRegister.value || !repasswordRegister.value || !usernameRegister.value){ 
      alert("Enter all required fields"); 
     }else if (passwordRegister.value != repasswordRegister.value){ 
      alert("Passwords must match"); 
     }else { 
      var newUser = new User({ 
         username : usernameRegister.value, 
         password : passwordRegister.value 
        }); 
       User.find({username:usernameRegister.value}, function (error, user) { 

         if (error) throw error; 

         if(user){ 
          window.location("/register"); 
         }else { 
          newUser.save(function (error) { 
           if(error) throw error; 
          }); 
          window.location("/login"); 
         } 
         // user.comparePassword(passwordRegister.value, function (error, isMatch) { 
         //  if (error) throw error; 
         // 
         //  return 1; 

         //}) 
       }); 

     } 

    } 


} 

當我評論了var User = require('/models/Mongoose Database/user_database');,所有檢查的onclick函數內部做工精細。但是當我取消註釋時,它不會識別按鈕點擊。

我想知道這是否是從註冊頁面獲取值並將它們存儲在貓鼬數據庫中的正確方法。

+0

是不是混合服務器和客戶端代碼?您的模型不應該從客戶端訪問。創建一個REST API來修改你的數據庫服務器端 – xShirase

+0

@ num8er我們都是初學者,沒有什麼可笑的 – xShirase

+0

@xShirase謝謝你指出。所以我必須先學習如何製作api。像這樣? https://hackhands.com/mongodb-crud-mvc-way-with-passport-authentication/ –

回答

3

您正在混合服務器和客戶端代碼。 Mongoose模型和Node.js函數不能在客戶端的window.onload內部訪問。

簡而言之,您需要創建一個REST API來在服務器上執行數據庫操作。你有所有正確的工具,只需要重新排列它們。

流量將是這樣:

  • 得到在瀏覽器中輸入
  • 呼叫端點值您的服務器上(例如/ API /的createUser)在快遞路由器
  • ,有一個名爲/ API /的createUser路線,您可以訪問用戶模型和執行創建/刪除/更新等

我的建議是你要經過this tutorial WHI ch應該可以消除你的困惑,讓你立刻加快速度。祝你好運!

此外,Passport可以幫助您進行身份驗證,但我相信您應該先學習如何構建基本的API。身份驗證是一個棘手的野獸;)

+0

感謝您的指導。接受答案因爲這是我正在尋找,一種方式來執行所有這些操作。 –