走到这一步,我们的网站还不能称为动态的网站,因为所要的数据都是伪造的,所以现在要对数据库的模型进行设计
Mongoose
我们用到的工具模块是Mongoose,他能对Mongodb进行建模的这样一个操作,在Mongoose里面有这样几个概念,分别是
Schema: 模式,在模式里面我们对数据进行定义,定义字段对类型,比如是字符串类型,还是数字类型
Model: 模型,编译模型,对传入对Schema进行编译,然后会生成构造函数
Documents: 文档
Schema-模式定义
var mongoose = require('mogoose'); var MovieSchema = new mongoose.Schema({ doctor:String, title:String, language:String, country:String, year:Number, summary:String })
Model-编译模型
var mongoose = require('mongoose'); var MovieSchema = require('./schemas/movie'); var Movie = mongoose.model('Movie',MovieSchema) module.exports = Movie
有了数据库模型以后,事情就变得好办了,现在对文档实例化,只需要调用模型,也就是这个构造函数,传入一条数据,然后再调用save方法,就可以把这条数据给传入到数据库里面去
//Documents-文档实例化 var Movie = require('./model/movie'); var movie = new Movie({ title:'机械战警', doctor:'何塞.帕迪利亚', year:2018 }) movie.save(function(err){ if(err){ return handleError(err); } })
数据库的查询分成多种,查询批量的,单条的,或者指定条件的查询,那么批量查询只需要调用模型的find方法,传一个空对象就ok了
//Documents - 数据库批量查询 var Movie = require('./models/movie'); app.get('/',function(req,res){ Movie .find({}) .exec(function(err,movies){ res.render('index',{ title:'imooc首页', movies:movies }) }) })
单条的话,传入一个特定的key,比如Movie.findOne
//Documents - 数据库单条查询 var Movie = require('./models/movie'); app.get('/',function(req,res){ Movie .findOne({_id:id}) .exec(function(err,movies){ res.render('index',{ title:'imooc首页', movies:movies }) }) })
单条数据的删除,直接调用模型的remove方法,传入一个特定的key和value就可以了
//Documents - 数据库单条删除 var Movie = require('./models/movie'); app.get('/',function(req,res){ Movie .remove({_id:id},function(err,movie){ if(err){ console.log(err); } }) })
然后我们需要调整一下模式和模型,他们目录的层次
nodeMongodb
node_modules
bower_components
view
index.jade
detail.jade
admin.jade
list.jade
models
movie.js
schemas
movie.js
app.js
最后我们来实现数据库的增删改查,以及开发后端的逻辑