使用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%>
注册成功后显示:

用户名已存在时:


使用express+mongoDB搭建多人博客 学习(3)connect-flash和mongodb,表单注册的更多相关文章
- 使用express+mongoDB搭建多人博客 学习(6)发表文章
发表文章 1.在modules文件夹下新建post.js var mongodb=require("./db"); function Post(name,title,post){ ...
- 使用express+mongoDB搭建多人博客 学习(5)权限控制
修改index.js如下: var express = require('express'); var router = express.Router(); var crypto=require('c ...
- 使用express+mongoDB搭建多人博客 学习(2)路由与模板
修改index.js路由规则: var express = require('express'); var router = express.Router(); /* GET home page. * ...
- 使用express+mongoDB搭建多人博客 学习(1) 安装blog工程
一.安装 1.安装express npm install -g expressnpm install -g express-generator 2.用ejs做模板,新建blog工程express -e ...
- 使用express+mongoDB搭建多人博客 学习(4)登录与登出
登录 修改index.ejs <%- include header %> <% if(locals.error){ %> <span><%= locals.e ...
- nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客
GitHub: https://github.com/nswbmw/N-blog N-blog 使用 Express + MongoDB 搭建多人博客 开发环境 Node.js: 6.9.1 Mong ...
- 2015年12月12 Node.js实战(一)使用Express+MongoDB搭建多人博客
序,Node是基于V8引擎的服务器端脚本语言. 基础准备 Node.js: Express:本文用的是3.21.2版本,目前最新版本为4.13.3,Express4和Express3还是有较大区别,可 ...
- 第1章 Express MongoDB 搭建多人博客
学习环境 Node.js : 0.10.22 + Express : 3.4.4 + MongoDB : 2.4.8 + 快速开始 安装 Express express 是 Node.js 上最流行的 ...
- 设计node.js搭建多人博客的思路(不讲数据库)
1.1.4:搭建多人博客 1.功能分析 搭建一个简单的多人注册,登录,发表文章及登出功能的博客 2.设计目标 未登录:主页左侧导航显示home.login.register,右侧显示已发表文章,发表日 ...
随机推荐
- PHP上传文件时,文件过大$_FILES为空
在php中判断上传文件的大小,但是文件一但过大,print_r($_FILES);的值就变为null了,有时候大家会遇到这么一个问题,上传小文件时,PHP能正常获取到,但是文件一超过8M就变为空了,我 ...
- html5--5-3 给直线添加样式
html5--5-3 给直线添加样式 学习要点 strokeStyle属性:设置颜色.渐变或模式(本节课只涉及到颜色) lineWidth属性:--设置线宽 Canvas的路径方法 moveTo() ...
- LoadRunner打开WebTours只显示头部解决办法
LoadRunner打开WebTours只显示头部解决办法 1.遇到这种情况,先查看一下路径HP\LoadRunner\WebTours下的cgierr日志中是否有错误,比如Can't open ...
- 【概念】SVG(1)
ok,我们讲讲svg 学习前提:懂HTML和基本的XML SVG简介: 1.SVG全称Scable Vector Graphic,可伸缩的矢量图 2.SVG用于定义针对于Web的基于矢量的图形 3.S ...
- tyvj2044 旅游景点
背景 “扫地”杯III NOIP2012模拟赛 day2 第二题 描述 liouzhou_101住在柳侯公园附近,闲暇时刻都会去公园散散步.很那啥的就是,柳侯公园的道路太凌乱了,假若不认识路就会走着走 ...
- 当数据库中的字段与javabean中对应的属性名不同
当数据库中的字段与javabean中对应的属性名不同时: 在查询语句中对不同的字段起别名,例如: 数据库中的字段名为last_name , javabean中为lastName则:select las ...
- 技术胖Flutter第四季-20导航的参数传递和接受-1
技术胖Flutter第四季-20导航的参数传递和接受-1 视频地址:https://www.bilibili.com/video/av35800108/?p=21 先安装一个新的插件: Awesome ...
- ThinkPHP3.2.3中,查询语句中in的使用方法。
//删除分类 public function del(){ $cid = I('get.cid'); $cate = M('category')->field('cid,pid')->se ...
- iOS QQ 登录
QQSDK 看官网的文档,确实让人头疼的一件事,说是两个资源文件,就找到了一个(TencentOpenAPI.framework),Demo中也没有找到. 接下来具体实现: 导入库: 添加SDK依赖的 ...
- layui常用功能
包含的主要样式: 验证不通过时的弹窗 弹窗修改信息 询问框(是否删除之类的) 操作成功提示.操作失败提示 加载样式(显示加载层) 文件下载请前往github over!over!over!