koa后端模板

最近又学习了下koa2,参考各种资料整理了一套开箱即用的模板,和大家一起学习交流,主要用到的技术栈是node,koa2,mongoose,mongodb数据库,以及一些常用的中间件,log4js,jwt,cros等

项目构建


介绍下目录结构,如下

├── README.md 项目描述
├── app  业务侧代码
│   ├── controller 与路由关联的api方法
│   └── modal 数据模型
│      ├── baseDal.js  基础模型
│      └── user.js   具体模型
├── app.js 入口文件
├── bin 命令
│   ├── run  nodemon 的入口文件
│   └── www 
├── config 配置文件
│   ├── corsConfig.js cros配置
│   ├── dbConfig.js 数据库配置
│   ├── jwtConfig.js jwt配置
│   ├── logConfig.js 日志配置 
│   └── serverConfig.js 服务配置
├── logs  日志目录(该文件夹由配置文件自动生成)
│   ├── error 错误日志
│   └── response 普通响应日志 
├── middleware  中间件
│   └── loggers.js  日志中间件
├── public 公共资源(vue打包后的文件放在此处)
│   └── index.html html入口文件(示例)
├── routes  路由
│   ├── allRoute.js 总路由配置(文件名是路由名构成的一部分)
│   ├── test.js 各个模块路由配置
│   └── users.js  
├── utils 公用方法 
│   ├── logUtil.js 
│	├── mkdir.js 
│   └── serve.js
├── .eslintrc eslint配置文件
└── package.json

代码里基本都有注释,用的基本都是常用的语法,你可以基于此模板进行开发,大家一起学习交流,下面是baseDal的代码示例,你可以在这里继续扩展你想要的方法

/*
  该模块定义了基础的模型,所有扩展模型基于此模型
  同时扩展模型也可以定义自身的方法 如model user
*/
let mongoose = require("mongoose");

class BaseDal {
  constructor(Model, Schema) {
    this.model = mongoose.model(Model, Schema);
  }
  // 定义共同的方法
  findOne (dataArr = {}) {
    return new Promise((resolve, reject) => {
      this.model.findOne(dataArr, function (e, docs) {
        if (e) {
          reject(e);
        } else {
          resolve(docs);
        }
      })
    })
  }
  find (dataArr = {}, skip = {}) {
    return new Promise((resolve, reject) => {
      this.model.find(dataArr, null, skip, function (e, docs) {
        if (e) {
          reject(e);
        } else {
          resolve(docs);
        }
      })
    })
  }
  count (dataArr = {}, skip = {}) {
    return new Promise((resolve, reject) => {
      this.model.where(dataArr, null, skip).count(function (e, docs) {
        if (e) {
          reject(e);
        } else {
          resolve(docs);
        }
      })
    })
  }
  save (dataArr) {
    return new Promise((resolve, reject) => {
      let user = new this.model(dataArr);
      user.save(function (e, data) {
        if (e) {
          reject(e);
        } else {
          resolve(data);
        }
      });
    })
  }
  update (option = {}, dataArr = {}) {
    return new Promise((resolve, reject) => {
      this.model.update(option, dataArr, function (e, data) {
        if (e) {
          reject(e);
        } else {
          resolve(data);
        }
      });
    })
  }
  delete (dataArr) {
    return new Promise((resolve, reject) => {
      this.model.remove({
        _id: dataArr.id
      }, function (e, data) {
        if (e) {
          reject(e);
        } else {
          resolve(data);
        }
      });
    })
  }
}

export default BaseDal

modal user继承BaseDal,你可以在modal下继续添加你需要的模块

let mongoose = require("mongoose");
import BaseDal from './BaseDal'
let Schema = mongoose.Schema;
let UserSchema = new Schema({
    userName: String, // 用户名
    password: String, // 密码
    createTime: {
        type: Date,
        dafault: Date.now()
    },
    updateTime: {
        type: Date,
        dafault: Date.now()
    },
})

UserSchema.pre('save', function (next) {
    if (this.isNew) {
        this.createTime = this.updateTime = Date.now()
    }
    else {
        this.updateTime = Date.now()
    }
    next()
})
class User extends BaseDal{
    constructor() {
        super("user", UserSchema); // 调用父类的constructor(Model, Schema)
    }
    // 此处定义子类的方法

    // findOne (dataArr = {}) {
    //     return new Promise( (resolve, reject) => {
    //         this.users.findOne(dataArr, function (e, docs) {
    //             if (e) {
    //                 reject(e);
    //             } else {
    //                 resolve(docs);
    //             }
    //         })
    //     })
    // }

}

let USER = new User()

export { USER }

koa2学习地址参考
模板资料所在地址

发布了53 篇原创文章 · 获赞 88 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_43702430/article/details/103456209
koa