使用express+mongoDB搭建多人博客 学习(3)connect-flash和mongodb,表单注册
1、根目录下新建settings.js,存放数据库配置
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%>
注册成功后显示:

用户名已存在时:


hi,我的新博客地址:ysha.me !!
浙公网安备 33010602011771号