使用express+mongoDB搭建多人博客 学习(3)connect-flash和mongodb,表单注册
2015-01-26 16:22
579 查看
1、根目录下新建settings.js,存放数据库配置
2、根目录下新建models文件夹,在models文件夹下新建db.js
3、安装express-session、mongodb与connect-mongo
4、修改app.js文件:
增加:
5、安装connect-flash模块
npm install connect-flash --save
修改app.js:
6、models文件夹下新建user.js
7、routes文件夹下index.js修改如下:
8、视图reg.ejs修改为:
密码不一致时,效果如下:
9、routes文件夹下index.js修改如下:
app.js修改:
views文件夹中的index.ejs修改:
注册成功后显示:
用户名已存在时:
module.exports={ cookieSecret:"myblog", db:"blog", host:"localhost" };
2、根目录下新建models文件夹,在models文件夹下新建db.js
var settings=require("../settings"), Db=require('mongodb').Db, Connection=require('mongodb').Connection, Server=require('mongodb').Server; module.exports=new Db(settings.db,new Server(settings.host,Connection.DEFAULT_PORT),{safe:true});
3、安装express-session、mongodb与connect-mongo
4、修改app.js文件:
增加:
var session = require('express-session'); vr MongoStore = require('connect-mongo')(session); var settings=require("./settings");
app.use(session({ secret: 'settings.cookieSecret', key:settings.db, cookie:{maxAge:1000*60*60*24*30},//30 days store: new MongoStore({db:settings.db}) }));
5、安装connect-flash模块
npm install connect-flash --save
修改app.js:
var flash = require('connect-flash'); var session = require('express-session'); vr MongoStore = require('connect-mongo')(session); var settings=require("./settings");
app.use(flash());
app.use(session({ secret: 'settings.cookieSecret', key:settings.db, cookie:{maxAge:1000*60*60*24*30},//30 days store: new MongoStore({db:settings.db}) }));
app.use(function(req, res, next) {
console.log("flash!");
res.locals.error = req.flash('error').toString();
next();
});
6、models文件夹下新建user.js
var mongodb=require('./db'); function User(user){ this.name=user.name; this.password=user.password; this.email=user.email; } module.exports=User; User.prototype.save=function(callback){ var user={ name:this.name, password:this.password, email:this.email }; mongodb.open(function(err,db){ if(err){ return callback(err); } db.collection("users",function(err,collection){ if(err){ mongodb.close(); return callback(err); } collection.insert(user,{ safe:true },function(err,user){ mongodb.close(); if(err){ return callback(err); } callback(null,user[0]); }); }); }); }; User.get=function(name,callback){ mongodb.open(function(err,db){ if(err){ return callback(err); } db.collection('users',function(err,collection){ if(err){ mongodb.close(); return callback(err); } collection.findOne({ name:name, },function(err,user){ mongodb.close(); if(err){ return callback(err); } callback(null,user); }); }); }); };
7、routes文件夹下index.js修改如下:
var express = require('express'); var router = express.Router(); var User=rireque("../models/user.js");
router.post('/reg',function(req,res,next){ var name=req.body.name, password=req.body.password, repassword=req.body.repassword; if(repassword!==password){ req.flash("error","两次输入的密码不一致"); return res.redirect("/reg"); } });
8、视图reg.ejs修改为:
<%- include header %> <% if(locals.error){ %> <span><%= locals.error %></span> <% } %> <form method="post"> 用户名:<input type="text" name="name"/><br/> 密码:<input type="password" name="password"/><br/> 确认密码:<input type="password" name="repassword"/><br/> 邮箱:<input type="email" name="email"/><br/> <input type="submit" value="注册"/> </form> <%- include footer %>
密码不一致时,效果如下:
9、routes文件夹下index.js修改如下:
var express = require('express'); var router = express.Router(); var crypto=require('crypto'); var User=require("../models/user.js");
router.post('/reg',function(req,res,next){ var name=req.body.name, password=req.body.password, repassword=req.body.repassword; if(repassword!==password){ req.flash("error","两次输入的密码不一致"); return res.redirect("/reg"); } var md5=crypto.createHash('md5'); password=md5.update(req.body.password).digest('hex'); var newUser=new User({ name:req.body.name, password:password, email:req.body.email }); User.get(newUser.name,function(err,user){ if(user){ req.flash('error',"用户名已存在"); return res.redirect("/reg"); } newUser.save(function(err,user){ if(err){ req.flash("error",err); return res.redirect("/reg"); } req.session.user=user; req.flash("success","注册成功"); res.redirect("/"); }); }); });
app.js修改:
app.use(function(req, res, next) { res.locals.error = req.flash('error').toString(); res.locals.success = req.flash('success').toString(); next(); });
views文件夹中的index.ejs修改:
<%- include header %> 这是主页 <% if(locals.success){ %> <span><%= locals.success %></span> <% } %> <%- include footer%>
注册成功后显示:
用户名已存在时:
相关文章推荐
- 使用express+mongoDB搭建多人博客 学习(2)路由与模板
- 使用express+mongoDB搭建多人博客 学习(1) 安装blog工程
- 使用express+mongoDB搭建多人博客 学习(5)权限控制
- 使用express+mongoDB搭建多人博客 学习(4)登录与登出
- 使用express+mongoDB搭建多人博客 学习(6)发表文章
- 使用nodejs、mongodb、express、linux搭建社区网站(4)-mongodb连接及注册的开发
- 一个nodejs+mongodb搭建的博客,使用module: ejs, express, mongodb, underscore等,不错的入门文章
- nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客
- 使用express和MongoDB搭建多人博客(1)
- 使用 Express + MongoDB 搭建多人博客
- 使用 Express + MongoDB 搭建多人博客
- 2015年12月12 Node.js实战(一)使用Express+MongoDB搭建多人博客
- 使用nodejs、mongodb、express、linux搭建社区网站(2)之项目创建及app.js生成
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置
- NodeJS搭建博客系统(四)使用模版引擎(node+express+ejs做的一个demo)
- Nodejs实战双色(by赵坤等...)第一章Express+MongoDB搭建博客的一些错误
- node+express+mongoDB搭建个人博客 ( 一 )
- 使用node+mongodb搭建简单个人博客——第一章遇到的问题
- DigitalOcean上使用Tornado+MongoDB+Nginx+Supervisor+DnsPod快速搭建个人博客
- 学习使用React一步步搭建普通博客应用