node+express+mongoDB搭建个人博客 ( 二)
2016-12-17 00:09
369 查看
搭建个人博客 ( YIDBlog )
(node+express+ejs+node+mongodb+mongoose)
(上一章已经将博客的界面搭建好了,这一章我们来实现用户的注册,登录等功能 )一. 连接数据库
1.在根目录下创建config文件夹,在config文件夹中创建config.js文件来配置数据库信息
module.exports = { port: 3000,//端口号 mongodb:'mongodb://localhost/simpleBlog'//连接本地数据库 };
2. 在根目录下创建models文件夹,该文件夹用来存放数据模型Schema Model , 创建user.model.js (名字自定义)
(Schema是一个文档的数据结构,它在Mongoose是一个JSON对象。它最大的特点就是无需确定字段的大小,这特别适用于需要改变对象大小的情况)var mongoose = require('mongoose'); var UserSchema = new mongoose.Schema({ username:String, password:String, email:String }); mongoose.model('User',UserSchema);
这样就创建好了用户对象了,然后可以将模型和数据库连接了,修改user.model.js
var mongoose = require('mongoose'); var config = require('./../config/config'); mongoose.connect(config.mongodb); var UserSchema = new mongoose.Schema({ username:String, password:String, email:String }); //这里会数据库会创建一个users集合 var User = mongoose.model('User', UserSchema); module.exports = User;
3.修改routes下的index.js文件:
var mongoose = require('mongoose'); var User = require('./../models/user.model'); //用户注册 app.get('/reg', function (req, res) { res.render('reg', { title: '注册', }); }); app.post('/reg', function (req, res) { var user = new User({ username:req.body.username, password:password, email:req.body.email }); if(req.body['password'] != req.body['password-repeat']){ //req.flash("error",'两次输入的密码不一致'); console.log('两次输入的密码不一致'); return res.redirect('/');//返回注册页 } User.findOne({'username':user.username},function(err,data){ if(err){ req.flash("err",err); return res.redirect('/'); } if(data != null){ // req.flash('error','该用户已存在'); console.log('该用户已存在'); return res.redirect('/reg');//返回注册页 }else{ //保存新的用户 user.save(function(err){ if(err){ //req.flash('err',err); console.log(err); return res.redirect('/'); } //req.flash('success', '注册成功!'); console.log('注册用户成功'); res.redirect('/');//注册成功后返回主页 }) } }) });
不熟悉mongodb语法的同学,可以在该网址简单学习下:
http://blog.163.com/ji_1006/blog/static/1061234120137221592807
可能会有人发现上面有个req.flash(),这个是返回提示语,比如注册成功,跳转之后会新的页面提示,只出现一次。
4.修改reg.ejs
<%- include header %> <form class="form-horizontal" role="form" method="POST"> <div class="form-group"> <label for="firstname" class="col-sm-2 control-label">用户名</label> <div class="col-sm-10"> <input type="text" class="form-control" name="username" placeholder="输入用户名"> </div> </div> <div class="form-group"> <label for="lastname" class="col-sm-2 control-label">密码</label> <div class="col-sm-10"> <input type="password" class="form-control" name="password" placeholder="输入密码"> </div> </div> <div class="form-group"> <label for="lastname" class="col-sm-2 control-label">重复密码</label> <div class="col-sm-10"> <input type="password" class="form-control" name="password-repeat" placeholder="输入密码"> </div> </div> <div class="form-group"> <label for="lastname" class="col-sm-2 control-label">邮箱</label> <div class="col-sm-10"> <input type="text" class="form-control" name="email" placeholder="再次输入密码"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <input type="submit" class="btn btn-default" value="完成注册" /> </div> </div> </form> <%- include footer %>
在这里我们先用命令行查询下数据库是否有用户
通过该图可以看到用户是空的,接下来我们可以启动项目,然后访问 http://localhost:3000/reg
提交表单 ,我们再查询一次数据库,如图:
这里的密码是因为我自己的代码上加用了加密的方法,就这样,注册就成功了,接下来我们来写登录的功能。
5.在index.js原始基础上,我们继续添加代码:
app.get('/login',checkNoLogin,function (req, res) { res.render('login', { title: '登录' }); }); app.post('/login',function (req, res) { var password = req.body.password; //检查用户是否存在 User.findOne({'username':req.body.username},function(err,user){ if(err){ console.log('error','err'); // req.flash('error','登录出错'); return res.redirect('/'); } //用户不存在 if(!user){ console.log('error','用户不存在'); // req.flash('error','用户不存在'); return res.redirect('/login'); } //判断密码是否一致 if(user.username != password){ console.log('error','密码错误'); // req.flash('error','密码错误'); return res.redirect('/'); } console.log(user.username); //req.flash('success','登录成功'); res.redirect('/'); }); });
6.login.ejs代码如下:
<%- include header %> <form class="form-horizontal" role="form" method="POST"> <div class="form-group"> <label for="firstname" class="col-sm-2 control-label">用户名</label> <div class="col-sm-10"> <input type="text" class="form-control" name="username" placeholder="输入用户名"> </div> </div> <div class="form-group"> <label for="lastname" class="col-sm-2 control-label">密码</label> <div class="col-sm-10"> <input type="password" class="form-control" name="password" placeholder="输入密码"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <input type="submit" class="btn btn-default" value="登录" /> </div> </div> </form> <%- include footer %>
用户注册和登录的功能就这样完成了,是不是觉得很简单呢?
相关文章推荐
- node+express+mongoDB搭建个人博客 (五)
- node.js&mongodb&express 搭建个人博客系统
- node+express+mongoDB搭建个人博客 (六)
- node+express+mongoDB搭建个人博客 (四)
- node+express+mongoDB搭建个人博客 ( 一 )
- node+express+mongoDB搭建个人博客 (三)
- 一个nodejs+mongodb搭建的博客,使用module: ejs, express, mongodb, underscore等,不错的入门文章
- 用Node.JS+MongoDB搭建个人博客(app.js接口文件)(二)
- 用Node.JS+MongoDB搭建个人博客(成品展示)
- Node.js + Express + Mongodb 开发搭建个人网站(二)
- Node.js + Express + Mongodb 开发搭建个人网站(一)
- MongoDB + express + node + bootstrap 搭建多人博客
- nodejs+express+mongodb搭建博客
- 最近学习了Node,利用Express搭建了个人博客,总结下吧
- Node.js + Express + Mongodb 开发搭建个人网站(三)
- express +jade +mongoDB+bootstrap搭建个人博客
- nodeJs+express+mongoDB开发个人博客
- 用Node.JS+MongoDB搭建个人博客(model目录)(三)
- nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客
- 用node express mongodb建立个人博客