Angular+Node实战之登陆注册

发布时间:2019-06-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Angular+Node实战之登陆注册脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

今天为昨天写的登陆注册页面增加了前端和后端逻辑,后端采用exPress,前端则是AngularJS,数据库使用Mongodb,没有加缓存层。


VAR Services=angular.module('myApp.Services',[]); Services.factory('checkUser',function(){ //检查@R_249_2126@和注册时填写的格式 function checkUserName(str, minLen, maxLen) { var reg = /^[(u4e00-u9fa5)a-z][(u4e00-u9fa5)a-zA-Z0-9_]{1,15}$/; var len = str.length; return reg.test(str) && len >= minLen && len <= maxLen; } function checkEmail(str) { var reg = /^(?:[w!#$%&'*+-/=?^`{|}~]+.)*[w!#$%&'*+-/=?^`{|}~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-](?!.)){0,61}[a-zA-Z0-9]?.)+[a-zA-Z0-9](?:[a-zA-Z0-9-](?!$)){0,61}[a-zA-Z0-9]?)|(?:[(?:(?:[01]?d{1,2}|2[0-4]d|25[0-5]).){3}(?:[01]?d{1,2}|2[0-4]d|25[0-5])]))$/; return reg.test(str) && str.length >= 6 && str.length <= 64; } return function(form,option) { if(!form.username) return '用户名缺省'; if(!form.password) return '密码缺省'; if(!checkUserName(form.username, 4, 8)) return '用户名格式有误'; if(!checkUserName(form.password,6,15)) return '密码格式有误'; if(option=='signup'){ if(!form.email) return 'Email缺省'; if(!form.rePEatPassword) return '重复密码缺省'; if(!checkEmail(form.email)) return 'Email格式错误'; if(form.password!==form.repeatPassword) return '密码不一致'; } return null; }; }).factory('extend',function(){ //简单深度复制对象 return function(dst,src){ for(var i in src){ dst[i]= typeof src[i]==='object'?cloneobject(src[i]):src[i]; } }; }).factory('CryptoJS',function(){ //加密模块 return window.CryptoJS; });

Controllers.controller('SignCtrl',function($scope,$http,$window,extend,CryptoJS,checkUser){ $scope.regForm={}; $scope.LOGForm={}; $scope.msg=''; $scope.appear=false; $scope.signup=function(){ var err=checkUser($scope.regForm,'signup'); if(err){ $scope.msg=err; $scope.appear=true; } else{ var tmp={}; extend(tmp,$scope.regForm); tmp.password=CryptoJS.SHA256(tmp.password).toString(); tmp.password=CryptoJS.HmacSHA256(tmp.password,'ustc').toString(); delete tmp.repeatPassword; // console.log($scope.regForm); // console.log(tmp); $http.post('/signup',tmp).success(function(data){ if(data.err){ console.log(data.err.message); $scope.msg=data.err.message; $scope.appear=true;//使alert展现 } else{ $scope.msg='注册成功,请登陆'; $scope.appear=true; $scope.logForm.username=$scope.regForm.username; $scope.logForm.password=$scope.regForm.password; //自动填充登陆框 } }).error(function(data){ $scope.msg='未知错误,请重试'; $scope.appear=true; }); } }; $scope.signin=function(){ var err=checkUser($scope.logForm,'signin'); if(err){ $scope.msg=err; $scope.appear=true; } else{ var tmp={}; extend(tmp,$scope.logForm); tmp.password=CryptoJS.SHA256(tmp.password).toString(); tmp.password=CryptoJS.HmacSHA256(tmp.password,'ustc').toString(); $http.post('/signin',tmp).success(function(data){ console.log(data); if(data.err){ console.log(data.err.message); $scope.msg=data.err.message; $scope.appear=true; } else{ $window.location.href='/'; } }).error(function(data){ $scope.msg='未知错误,请重试'; $scope.appear=true; }); } }; });
  • 后端部分

function signup(req,res){ var tmp=req.body.password; req.body.password=tool.MD5(tmp); //addUser负责与数据库交互,会检查用户名和子邮件是否重复 userDB.addUser(req.body).then(function(cont,user){ res.json({ success:true, err:null }); }).fail(function(cont,err){ res.json({ success:false, err:err }); }); } function signin(req,res){ var tmp=req.body.password; var uob=req.body; uob.password=tool.MD5(tmp); Then(function(cont){ User.findOne({username:uob.username},cont); }).then(function(cont,doc){ if(!doc) return cont(new Err(msg.USER.userNone)); if(doc.password!==uob.password) return cont(new Err(msg.USER.userpasswd)); req.session.uname=doc.username; res.cookie('user',{ username:doc.username, password:tmp, email:doc.email },{ signed:true, maxAge:900000 }); res.json({ success:true, err:null }); }).fail(function(cont,err){ console.log(err); res.json({ success:false, err:err }); }); }
  • 数据库部分
function addUser(userobj){
    return Then(function(cont){
        User.findOne({username:userobj.username},cont);
    }).then(function(cont,doc){
        if(doc) return cont(new Err(msg.USER.userNameExist));
        else User.findOne({email:userobj.email},cont);
    }).then(function(cont,doc){
        if(doc) return cont(new Err(msg.USER.userEmailExist));
        else  (new User(userobj)).save(cont);
    }).fail(errorhandler);
}

脚本宝典总结

以上是脚本宝典为你收集整理的Angular+Node实战之登陆注册全部内容,希望文章能够帮你解决Angular+Node实战之登陆注册所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。