设为首页 收藏本站
查看: 894|回复: 0

[经验分享] Node.js + Express 4.x + MongoDB 构建登录注册(三)

[复制链接]

尚未签到

发表于 2017-12-16 16:31:45 | 显示全部楼层 |阅读模式
  一、安装MongoDB
  移步度娘:http://jingyan.baidu.com/article/d5c4b52bef7268da560dc5f8.html
  二、加表加数据
  MongoDB中没有表的概念,人家叫“集合”。
  执行下面一连串命令:
  mongo  //启动数据库
  show dbs  //查看数据库,返回admin 和 local两个数据库
  use userinfo  //如果有则切换到userinfo数据库,如果没有就创建userinfo
  db  //返回userinfo,表示当前userinfo处于准备状态
  db.users.insert({username:'admin',password:'123'})  //向userinfo中的users集合插入一条数据。如果有合集users则向该集合插入数据,如果没有,则先创建users集合,再插入数据
  db.users.find().pretty()  //显示users集合中的数据,pretty()是格式化,有pretty()和没有的区别,一试便知。
  好了,数据库已经准备好了。
  三、项目安装mongodb模块
  “命令提示符”执行命令:npm install mongodb
  PS:执行安装命令时,请中断项目服务,方法是Ctrl+c
  四、连接数据库
  打开index.js
  

//引入模块,声明连接字符串  
const MongoClient=require('mongodb').MongoClient;
  
const DB_CONN_STR='mongodb://localhost:27017/userinfo';
  

  
//完整的 登录 逻辑代码
  
router.route('/login').all(function(req,res,next)
  
{
  
if(req.session.user)
  
{
  
req.session.error="您已登录!";
  
return res.redirect('home');
  
}
  
next();
  
}).get(function(req,res)
  
{
  
res.render('login',{title:'Login'});
  
}).post(function(req,res)
  
{
  
let user={username:req.body.username,password:req.body.password};
  
MongoClient.connect(DB_CONN_STR,function(err,db)
  
{
  
if(err)
  
{
  
console.log(err);
  
return;
  
}
  
db.collection('users').find({'username':user.username}).toArray(function(err,result)
  
{
  
if(err)
  
{
  
console.log(err);
  
return;
  
}
  
if(result.length)
  
{
  
if(result[0].password==user.password)
  
{
  
req.session.user=user;
  
return res.redirect('/home');
  
}
  
else
  
{
  
req.session.error='用户名或者密码错误!';
  
return res.redirect('/login');
  
}
  
}
  
else
  
{
  
req.session.error='账号不存在!';
  
return res.redirect('/login');
  
}
  
});
  
db.close();
  
});
  
});
  

  五、注册
  既然有了“登录”,怎么能少了“注册”,在“views”文件夹下新建“register.html”:
  

<!DOCTYPE html>  
<html>
  
<head>

  
<title><%=>
  
<link>  
</head>
  
<body>
  
<%- message %>

  
<h1><%=>  
<form action="" method="post">
  
<div>
  
<label for="">用户名:</label>
  
<input type="text" name="username" autofocus="" required="" />
  
</div>
  
<div>
  
<label for="">密码:</label>
  
<input type="password" name="password" required="" />
  
</div>
  
<div>
  
<label for="">确认密码:</label>
  
<input type="password" name="passwordSec" required="" />
  
</div>
  
<div>
  
<button type="submit">提交</button>
  
</div>
  
<div>
  
<a href="/login">已有账号,去登录!</a>
  
</div>
  
</form>
  
</body>
  
</html>
  

  打开app.js,增加对注册的路由:
  (PS:验证密码一致性,可以放到前端js判断,这里偷懒。)
  

// 注册  
router.route('/register').all(function(req,res,next)
  
{
  
if(req.session.user)
  
{
  
req.session.error='您已登录!';
  
return res.redirect('/home');
  
}
  
next();
  
}).get(function(req,res)
  
{
  
res.render('register',{title:'Register'});
  
}).post(function(req,res)
  
{
  
let newUser={username:req.body.username,password:req.body.password,passwordSec:req.body.passwordSec};
  
let addStr=[{username:newUser.username,password:newUser.password}];
  
MongoClient.connect(DB_CONN_STR,function(err,db)
  
{
  
db.collection('users').findOne({username:newUser.username},function(err,result)
  
{
  
if(!result)
  
{
  
if(newUser.password===newUser.passwordSec)
  
{
  
MongoClient.connect(DB_CONN_STR,function(err,db)
  
{
  
req.session.error='注册成功,请登录!';
  
db.collection('users').insert(addStr);
  
db.close();
  
return res.redirect('/login');
  
});
  
}
  
else
  
{
  
req.session.error='两次密码不一致!';
  
return res.redirect('/register');
  
}
  
}
  
else
  
{
  
req.session.error='用户名已存在!';
  
return res.redirect('/register');
  
}
  
})
  
db.close();
  
});
  
});
  

  至此,登录注册功能基本完成了,为什么还是基本,因为代码中对数据库的应用是简单粗暴的,没有封装DBHelp,没有封装model,只是实现了功能,希望对大家有点用处。
  六、附录
  实例中用到的mongoDB数据库操作命令
  db.users.remove({name:'xxx'})  //删除name为'xxx'的记录
  db.users.remove({})  //删除users集合中的所有数据
  db.users.drop()  //删除users集合
  db.users.findOne({name:'xxx'})   //查询name为'xxx'的记录,只返回遇到的第一条记录
  db.users.find()  //返回所有name为'xxx'的记录

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-424742-1-1.html 上篇帖子: mongodb更新数组中的所有匹配项 下篇帖子: Node.js + Express 4.x + MongoDB 构建登录注册-简易用户管理(五)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表