node建立一个简单的博客

1新建一个工程

 用express快速建立一个项目模板 express -e microblog ,文档如下


进入package.json修改依赖项:

安装模板npm install

2 路由控制:
//路由
app.get('/', routes.index);
app.get('/u/:user', routes.user);
app.get('/post',routes.checkLogin);
app.get('/post',routes.post);
app.post('/post',routes.checkLogin)
app.post('/post', routes.doPost);
app.get('/reg', routes.checkNotLogin);
app.get('/reg', routes.reg);
app.post('/reg', routes.checkNotLogin);
app.post('/reg', routes.doReg);
app.get('/login', routes.checkNotLogin)
app.get('/login', routes.login);
app.post('/login',routes.checkNotLogin);
app.post('/login', routes.doLogin);
app.get('/logout', routes.logout);
get和post获取当前的url地址,回调后面routes里面的函数
/*
 * GET home page.
 */
var crypto=require('crypto'),
 	User=require('../models/user.js'),
  Post=require('../models/post.js');
exports.index = function(req, res){
  Post.get(null,function(err,posts){
    if(err){
      posts=[];
    }

    res.render('index', { 
    title: '主页' ,
    user:req.session.user,
    posts:posts,
    success:req.flash('success').toString(),
    error:req.flash('error').toString()
  });
  });
 
};

exports.user = function(req, res){
  
};

exports.post = function(req, res){
  res.render('post',{
    title: '发表' ,
  });

};
exports.doPost=function(req,res){

var currentUser=req.session.user,
    post=new Post(currentUser.name,req.body.title,req.body.post);
    post.save(function(err){
      if(err){
        req.flash('error',err);
        return res.redirect('/');
      }
      req.flash('success','发布成功!');
       return res.redirect('/');
    });
}

exports.reg = function(req, res){
  res.render('reg',{
  	title:'注册',
  	user:req.session.user,
  	success:req.flash('success').toString(),
  	error:req.flash('error').toString()
  });
};


exports.doReg = function(req, res){
  console.log(req.body);
  //检测输入的口令是否一致
  if(req.body['password-repeat']!=req.body['password']){
  	req.flash('error','两次输入的口令不一致');
  	console.log("口令不一致");
  	return res.redirect('/reg');
  }

  //生成口令的散列值
  var md5=crypto.createHash('md5');
  var password=md5.update(req.body.password).digest('base64');

  var newUser=new User({
  	name:req.body.username,
  	password:password
  });
  
  console.log(newUser.name);
  //检查用户名是否已经存在
  User.get(newUser.name,function(err,user){
  	console.log(user);
  	if(user)
  		err='Username already exists';
  		console.log(user+"1");
  	if(err){
  		req.flash('error', err);
  		console.log(err+"2");
  		return res.redirect('/reg');
  	}

  	//如果不存在则新增用户

	newUser.save(function(err){
		
		if(err){
			console.log(err);
			req.flash('error', err);
  			return res.redirect('/reg');
		}
		console.log("成功");
		req.session.user=newUser;
		req.flash('success', '注册成功');
  		return res.redirect('/');

	});

  });
  	};
exports.login = function(req, res){
  res.render('login',{
  	title:'登录',
  	user:req.session.user,
  	success:req.flash('success').toString(),
  	error:req.flash('error').toString()
  });
};


exports.doLogin = function(req, res){
  console.log(req.body);
//生成密码的md5值
  	var md5=crypto.createHash('md5'),
  	password=md5.update(req.body.password).digest('base64');
//检查用户是否存在
User.get(req.body.name,function(err,user){
	if(!user){
    console.log('不存在');
		req.flash('error','用户名不存在');
		return res.redirect('/login');//用户名不存在跳动登录页
	}

	//检查密码一致
  console.log("user.password: "+user.password+"password: "+password);
	if(user.password!=password){
    console.log('密码错误');
		req.flash('error','密码错误');
		return res.redirect('/login')
	}


  console.log('登录成功');
	req.session.user=user;
	req.flash('success','登录成功!');
	return res.redirect('/')
});
};

exports.logout = function(req, res){
  
  req.session.user=null;
  req.flash('success','登录成功');
  return res.redirect('/')
};





//页面权限控制
exports.checkLogin=function(req,res,next){
  if(!req.session.user){
    console.log('未登录');
    req.flash('error','未登录!');
    res.redirect('/login');
  }
  next();
}

exports.checkNotLogin=function(req,res,next){
  if(req.session.user){
    console.log('已登录');
    req.flash('error','已登录');
     res.redirect('back');//返回之前的页面
  }
  next();
}
写在对面的index里面的接口中的方法,直接调用


3模板引擎

调用views下面的页面模板


当获取的地址是http://127.0.0.1:3000/时,调用routes.index这个方法,在index.js中调用exports.index这个方法,页面模板是res.render('index'用这个来渲染index页面,然后调用views中index.ejs页面,最后展示的是页面

在views下面新建


三个文件
4 数据库 mongodb
安装mongodb数据库,然后连接数据库
在工程目录下面新建settings.js文件,保存配置信息里面的内容如下:



db是数据库的名称,host是数据库本地的地址
在工程目录下新建models文件夹,里面新建3个文件



user内容如下
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);//错误,返回err信息
		}

	//读取user集合
	db.collection('users',function(err,collection){
		//console.log(collection);
		if(err){ 
			mongodb.close();
			return callback(err);//错误,返回err信息
		}

	//将用户数据插入 user集合
	collection.insert(user,{
		safe:true
	},function(err,user){

		mongodb.close();
		if(err){ 
			return callback(err)//返回
		}
		callback(null,user[0]);//成功!err为null,并返回存储后的用户文档

	});
	});

	});
}

User.get=function(name,callback){
	//打开数据库
	mongodb.open(function(err,db){
		if(err) {return callback(err);}

	//读取user集合
	db.collection('users',function(err,collection){

		if(err) {
			mongodb.close();
			return callback(err);//错误,返回err信息
		}

	//查找用户名(name键)值为name一个文档
	collection.findOne({
		name:name
	},function(err,user){
		mongodb.close();
		if(err){
			return callback(err)
		}
		callback(null,user);//成功!返回查询的用户信息

	});
	});

	});
}


5 程序判断
exports.doReg = function(req, res){
  console.log(req.body);
  //检测输入的口令是否一致
  if(req.body['password-repeat']!=req.body['password']){
  	req.flash('error','两次输入的口令不一致');
  	console.log("口令不一致");
  	return res.redirect('/reg');
  }

  //生成口令的散列值
  var md5=crypto.createHash('md5');
  var password=md5.update(req.body.password).digest('base64');

  var newUser=new User({
  	name:req.body.username,
  	password:password
  });
  
  console.log(newUser.name);
  //检查用户名是否已经存在
  User.get(newUser.name,function(err,user){
  	console.log(user);
  	if(user)
  		err='Username already exists';
  		console.log(user+"1");
  	if(err){
  		req.flash('error', err);
  		console.log(err+"2");
  		return res.redirect('/reg');
  	}

  	//如果不存在则新增用户

	newUser.save(function(err){
		
		if(err){
			console.log(err);
			req.flash('error', err);
  			return res.redirect('/reg');
		}
		console.log("成功");
		req.session.user=newUser;
		req.flash('success', '注册成功');
  		return res.redirect('/');

	});

  });
  	};
是否注册成功,用户名是否存在

检测数据库的数据

内容发表成功


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值