express mongodb MVC 架构

从网上找了好多关于 express 与mongodb的,总是不尽人意,所以就自己研究了一套框架。首先需要安装mongodb和 nodejs,这个在这里不介绍。
这里利用的是Mongoose进行数据库的操作。

1、安装 express

安装
npm install express -g
创建一个 express 项目

 express nodemogod
npm install
npm run start

然后打开http://localhost:3000,如果成功,说明 express 项目已经起好了。

2、Mongoose进行数据库操作

Mongoose链接数据库

mongoose.connect('mongodb://localhost:27017/nodemogodtest',{useNewUrlParser:true});

建立Schema

Schema定义数据库的结构。用于定义字段和集合的,但是不具备操作数据库的能力。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var testSchema = new Schema({
  title:  String,
  author: String
});

建立 Model

Model是由Schema编译而成的构造器,可以操作数据库

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var testSchema = new Schema({
  title:  String,
  author: String
});
module.exports = mongoose.model('test',testSchema);

数据库存的是 test 的集合。

操作数据库,mongoose已经支持 promise

Users.create({username:'ccc'}).then(function () {
        
    })

3、整理出自己的框架。

a、新建 auth 文件夹,

并在里面新建 mogo_base.js,msg.js

mogo_base.js数据库配置文件

var mongoose = require('mongoose'),
    DB_URL = 'mongodb://localhost:27017/nodemogodtest';
/**
 * 连接
 */
mongoose.connect(DB_URL,{useNewUrlParser:true});

/**
 * 连接成功
 */
mongoose.connection.on('connected', function () {
    console.log('Mongoose connection open to ' + DB_URL);
});

/**
 * 连接异常
 */
mongoose.connection.on('error',function (err) {
    console.log('Mongoose connection error: ' + err);
});

/**
 * 连接断开
 */
mongoose.connection.on('disconnected', function () {
    console.log('Mongoose connection disconnected');
});

module.exports = mongoose;

修改 bin/www 文件加入代码

var mongoose = require('../auth/mogo_base')

msg.js,用于封装返回数据格式。

exports.pass = function (res,msg, dat,code) {
    msg = msg||"OK";
    dat =dat|| {};
    code = code||200
   res.status(code).send({code:code,msg: msg, data: dat})
};

exports.fail = function (res,reason, code) {
    code = code||500
    reason = reason||''
    res.status(code).send({code:code,msg: reason})
};
b、新建schemas文件夹,以后所有的schemas建在这个下面,下面以users 为例,

新建users.js

var mongoose = require('mongoose');

var Schema = mongoose.Schema;
//申明一个mongoons对象
var UsersSchema = new Schema({
    username : { type: String },                    //用户账号
    userpwd: {type: String},                        //密码
    userage: {type: Number},                        //年龄
    logindate : { type: Date}  ,                     //最近登录时间
    // name: String,
    // paw: String,
    meta: {
        createAt: {
            type: Date,
            default: Date.now()
        },
        updateAt: {
            type: Date,
            default: Date.now()
        }
    }
})

//每次执行都会调用,时间更新操作
UsersSchema.pre('save', function(next) {
    if(this.isNew) {
        this.meta.createAt = this.meta.updateAt = Date.now();
    }else {
        this.meta.updateAt = Date.now();
    }

    next();
})

//查询的静态方法
UsersSchema.statics = {
    fetch: function(cb) { //查询所有数据
        return this
            .find()
            .sort('meta.updateAt') //排序
            .exec(cb) //回调
    },
    findById: function(id, cb) { //根据id查询单条数据
        return this
            .findOne({_id: id})
            .exec(cb)
    }
}

//暴露出去的方法
module.exports = UsersSchema
c、新建 model,以后的 model 建在这个下面,下面以 model 的 users 为例。

新建 users.js

var mongoose = require('mongoose')
var UsersSchema = require('../schemas/users') //拿到导出的数据集模块
var Users = mongoose.model('Users', UsersSchema) // 编译生成Movie 模型

module.exports = Users
d、修改 routes 下的 users 文件
var express = require('express');
var router = express.Router();
//新增
var mongoose = require('mongoose');//导入mongoose模块
var Users = require('../modules/users');//导入模型数据模块

var _msg = require('../auth/msg')
/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});


//查询所有用户数据
router.get('/users', function(req, res, next) {

   return  Users.find().then(function (users) {
       return _msg.pass(res,'',users)

    })
})
router.get('/add', function(req, res, next) {
    // return  Users.create({username:'bbb'},function () {
    //     return _msg.pass(res)
    // })
    return Users.create({username:'ccc'}).then(function () {
        return _msg.pass(res)
    })
})

module.exports = router;

启动项目,npm run start

在浏览器中输入http://localhost:3000/users/add,添加一条用户数据
返回数据:

{"code":200,"msg":"OK","data":{}}

在浏览器中输入http://localhost:3000/users/users,获取所有的用户

返回数据

{"code":200,"msg":"OK","data":[{"meta":{"createAt":"2018-11-14T04:09:28.159Z","updateAt":"2018-11-14T04:09:28.159Z"},"_id":"5beb9ff8f20f5a0c1d688608","username":"ccc","__v":0},{"meta":{"createAt":"2018-11-14T04:31:24.106Z","updateAt":"2018-11-14T04:31:24.106Z"},"_id":"5beba51c42103a0c44bfa3cb","username":"ccc","__v":0}]}

你可能感兴趣的:(nodejs,node,express,Mongoose)