2016-11-29 96 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

感谢您的指导。接受答案因为这是我正在寻找,一种方式来执行所有这些操作。 –