mongoose

之前的一篇文章《mongodb+nodejs》是mongodb的native
driver 来操作的,但是更成熟的方式应该使用mongoose,是代码更加简洁,更加安全。

这个例子和《mongodb+nodejs》中的例子一模一样,只是把
对mongodb操作语句,换成是mongoose的API,其他代码和文件完全一样。

代码如下:

var express = require('express');
var mongoose = require('mongoose');
var session = require('express-session');//之前是包括在express中,现在独立出来
var bodyParser = require('body-parser');//之前是包括在express 中,现在独立出来
var mongodb = require('mongodb');
var ObjectID = mongodb.ObjectID;//返回mongodb的_id一个结构,以便于查询

var app = express();
app.use(session(
	{secret:'my secret'
	,resave:false
	,saveUninitialized: true}
));
app.use(bodyParser.urlencoded({ extended: true }));//只有这里是true才能正确解析出user[first]之类的POST信息
app.use(bodyParser.json());//处理客户端传来的参数,并且存储在req.body.user中
app.use(express.static('views'));//防止客户端资源的文件夹
app.set('view engine','jade');//设置HTML解析引擎是jade
app.set('view options',{layout:false});

var Schema = mongoose.Schema;
var User = mongoose.model('User',new Schema({
	first:String
	,last:String
	,email:{type:String,unique:true}
	,password:{type:String,index:true}
}));

//db
//初始化服务器(地址、端口)
 mongoose.connect('mongodb://127.0.0.1/my-website');

 //自定义一个中间件,设置authenticated,和me(客户端文件会用到)
//注意,该自定义中间件,每个路径处理都会调用,且先调用
app.use(function(req,res,next){
	if(req.session.loggedIn){//登录id是否存在
		console.log('-------session logged' );
		res.locals.authenticated = true;//给客户端使用的

		console.log('req.session.loggedIn=' + req.session.loggedIn);
		console.log('typeof='+typeof(req.session.loggedIn));

		User.findById(req.session.loggedIn,function(err,doc){
			if(err){
				return next(err);
			}
			res.locals.me = doc;
			next();
		});
	}else {
		console.log('-------session not logged' );
		res.locals.authenticated = false;//未登录
		next();
	}
});
//获取主界面
app.get('/',function(req,res){
	console.log("------------/");
	res.render('index');
});
//获取登录界面
app.get('/login',function(req,res){
	console.log("------------login");
	res.render('login');
});
//提交登录信息
app.post('/login',function(req,res){
	console.log("------------login post");
	console.log("req.body.user:");
	console.log(req.body.user);
	//查找用户
	User.findOne({email:req.body.user.email,password:req.body.user.password},
	function(err,doc){
		if(err)
			return next(err);
		if(!doc)
			return res.send('<p>User not found.Go back and try again');
		req.session.loggedIn = doc._id.toString();
		res.redirect('/');
	});
});
//获取注册页面
app.get('/signup',function(req,res){
	console.log("------------signup");
	res.render('signup');
});
//提交注册信息
app.post('/signup',function(req,res,next){
	console.log("------------signup post");
	console.log(req.body.user);
	//插入注册数据
	var user = new User(req.body.user);
	user.save(function(err){
		if(err)
			return next(err);
		res.redirect('/login/' + user.email);
	});
});
//获取带参数的登录页面
app.get('/login/:signupEmail',function(req,res){
	console.log('----------/login/:signupEmail:');
	console.log(req.params.signupEmail);
	//登录页面,设置参数给客户端文件调用
	res.render('login',{signupEmail:req.params.signupEmail});
});
//获取退出页面
app.get('/logout',function(req,res){
	console.log("------------logout");
	req.session.loggedIn = null;
	//返回主界面
	res.redirect('/');
});

//监听
app.listen(3000,function(){
	console.log('\033[96m +  \033[39m app listening on *:3000');
});

参考:《了不起的nodejs》

时间: 2024-11-01 04:24:02

mongoose的相关文章

mongoose 全面理解

一.创建schemas 创建schemas的方式: 1 var userSchema = new mongoose.Schema({ 2 name: String, 3 email: String, 4 createdOn: Date 5 }); schemas中的数据类型有以下几种:? String? Number? Date? Boolean? Buffer? ObjectId? Mixed? Array 特别需要说明一下ObjectId类型和Mixed类型以及Array类型,在schema

mongoose中给字段添加索引的方法

mongoose中给字段添加索引的方法有两种,一种通过在定义schema的时候配置,如: 1 var animalSchema = new Schema({ 2 name: String, 3 type: String, 4 tags: { type: [String], index: true } 另一种通过index方法添加索引,如给name和type字段添加索引(1和-1分别表示升序索引和降序索引): animalSchema.index({ name: 1, type: -1 });

node 通过mongoose实现 mongodb的增删改

node 通过mongoose实现 mongodb的增删改 新建文件test.js 内容如下: var mongoose = require('mongoose') , Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/test'); var BlogSchema = new Schema({ id : {type : Number, index : true} ,title : {type : String} });

mongoose 学习笔记

1 安装 moogoose  模块 ,附加 --save 参数将包的信息添加到package.json 文件 npm install --save moogoose 2  加载 moogoose 模块,并连接数据库 var mongoose = require('mongoose'); //mongoose.connect('mongodb://mongod所在地址ip(ipdress)/需要连接的数据库名(databasename)'); mongoose.connect('mongodb:/

Mongoose简单学习笔记

1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Model创建的实体,他的操作也会影响数据库 注意: 1.本学习文档采用严格命名方式来区别不同对象,例如: var PersonSchema; //Person的文本属性 var PersonModel; //Person的数据库模型 var PersonEntity; //Person实体 2.Sch

Mongoose学习参考文档——基础篇

Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Model创建的实体,他的操作也会影响数据库 注意: 1.本学习文档采用严格命名方式来区别不同对象,例如: var PersonSchema; //Person的文本属性 var PersonModel; //

node.js + express(ejs) + mongodb(mongoose) 增删改实例

刚学node不久,以下是对最近学习的总结,不足的地方还请见谅. node 和 mongodb安装不做为本文讲解,想了解的朋友可以通过一下链接配置环境: node 安装:http://www.infoq.com/cn/articles/nodejs-npm-install-config Win7下MongoDB安装 :http://www.mkyong.com/mongodb/how-to-install-mongodb-on-windows/ MongoDB 安装步骤总结: 1.解压目录到d盘

Mongoose 参考手册

转自:https://cnodejs.org/topic/548e54d157fd3ae46b233502 Mongoose 是什么? 一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口. Schema 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力.可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架 /* 定义一个 Schema */ var mongoose =

DICOM:剖析Orthanc中的Web Server,Mongoose之“连接请求触发的事件序列”(二)

背景: Orthanc是本专栏中介绍过的一款新型DICOM服务器,具有轻量级.支持REST的特性,可将任意运行Windows和Linux系统的计算机变成DICOM服务器,即miniPACS.Orthanc内嵌多种模块,数据库管理简单,且不依赖于第三方软件.因此通过剖析Orthanc源码可以学习到搭建DICOM系统中的各个环节,例如SQLite嵌入型数据库.GoogleLog日志库.DCMTK医学DICOM库,以及近期要介绍的开源Web Server,Mongoose. 题记: 近期计划参照官网剖

nodejs(一) 简单登录验证 使用mongoose 操作MongoDB

---恢复内容开始--- 开发使用webstorm 9  新建nodejs+express 项目 newfarmer 文章目录 配置Mongoose 创建目录及文件 插入数据,POST提交JSON增加一条记录 查询数据,取出刚增加的记录 1. 配置Mongoose 增加mongoose的类库 npm install mongoose --save 2.创建目录及文件 在models目录,增加mongodb.js文件 数据库连接文件1 /** 2 * Created by hao on 2014/