Skip to content

Latest commit

 

History

History
73 lines (52 loc) · 2.7 KB

4.6 连接数据库.md

File metadata and controls

73 lines (52 loc) · 2.7 KB

我们使用 Mongoose 这个模块操作 mongodb 进行增删改查。

app.js

使用全局变量实现数据库操作

global.dbHelper = require('./common/dbHelper');
global.db = mongoose.connect(config.mongodb);

./common/model.js

数据库集合设计:user(用户信息)、commodity(商品信息)、cart(购物车信息)

module.exports = {
    user:{
        name: {type: String,required: true},
        password: {type: String, required: true}
    },
    commodity: {
        name: String,
        price: Number,
        imgSrc: String
    },
    cart: {
        uId: {type: String},
        cId: {type: String},
        cName: { type: String},
        cPrice: { type: String},
        cImaSrc: { type: String},
        cQuantity: { type: Number},
        cStatus: { type: Boolean,default: false} 
    }
}

4.6.1 为什么使用 Mongoose

Mongoose:

优点:

  1. 封装了数据库的操作,给人的感觉是同步的,其实内部是异步的。如 mongoose 与 MongoDB 建立连接:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var BlogModel = mongoose.model('Blog', { title: String, content: String });
BlogModel.find()
  1. 支持 Promise。这个也无需多说,Promise 是未来趋势,可结合 co 使用,也可结合 async/await 使用。
  2. 支持文档校验。如上所述。

缺点:

  1. 功能多,复杂。Mongoose 很强大,有很多功能是比较鸡肋甚至可以去掉的,如果使用反而会影响代码的可读性。比如虚拟属性以及 schema 上定义 statics 方法和 instance 方法,可以把这些定义成外部方法,用到的时候调用即可。
  2. 较弱的 plugin 系统。如:schema.pre('save', function(next) {})schema.post('find', function(next) {}),只支持异步 next(),灵活性大打折扣。
  3. 其他:对新手来说难以理解的 Schema、Model、Entry 之间的关系;容易混淆的 toJSON 和 toObject,以及有带有虚拟属性的情况;用和不用 exec 的情况以及直接用 then 的情况;返回的结果是 Mongoose 包装后的对象,在此对象上修改结果却无效等等。

扩展阅读

  1. 从零开始写一个 Node.js 的 MongoDB 驱动库

  2. 为什么使用 Mongolass

上一节:4.5 页面设计

下一节:4.7 注册