为了简略,各种软件和库的名称我就不辨别大小写了。

说下为什么应用sqlite,我在抉择sqlite前应用了mysql、mongodb这两款数据库,他们很成熟很弱小,然而配置起来对于老手要费点工夫,思考到我想要开发CMS是一个很轻量的零碎,应用这两个数据库感觉太重了。要害是sqlite性能少学起来也简略。

通常操作数据库都会抉择一个ORM,通过ORM去操作数据库,能够无效防止SQL注入平安问题,操作起来也比间接写SQL简略,这里抉择egg-orm,基于leoric封装的。

首先装置相干依赖

yarn add egg-orm sqlite3 @journeyapps/sqlcipher --save

在plugin中启用插件

module.exports = {  // had enabled by egg  static: {    enable: true,  },  orm: {    enable: true,    package: 'egg-orm',  },};

在config.default.js中配置数据库信息

     // 数据库     const userConfig = {        orm: {          client: '@journeyapps/sqlcipher', // 数据加密          dialect: 'sqlite',          database: appInfo.baseDir + '/database/data.db', // 数据寄存地位          connectionLimit: 10, // 连接池数量        },    }

实现以上配置后,在egg我的项目的app.js中,serverDidReady钩子里设置表模型同步,这样在利用启动后,表会依据模型主动创立和更新

async serverDidReady() {    await this.app.model.sync({ alter: true });    // http / https server 已启动,开始承受内部申请    // 此时能够从 app.server 拿到 server 的实例  }

当初就能够编写代码了,当初model目录中定义一个表构造

module.exports = function(app) {  const { Bone, DataTypes: { STRING, INTEGER } } = app.model;  // console.log(Realm)  class User extends Bone {    static table = 'user'    static attributes = {      name: STRING,      password: STRING,    }  };  return User}

而后在controller中写增删改查

'use strict';const { Controller } = require('egg');class HomeController extends Controller {  async list() {    const { ctx } = this;    const list = await ctx.model.User.find();    console.log(list);    ctx.body = list;  }  async create() {    const { ctx } = this;    await ctx.model.User.create({      password: '123456',      name: 'wmui',    });    ctx.body = {      success: true,    };  }  async update() {    const { ctx } = this.ctx;    const i = await ctx.model.User.update({      name: 'wmui',    }, {      password: '12345678',    });    console.log(i);    ctx.body = {      success: true,    };  }  async remove() {    const { ctx } = this.ctx;    const i = await ctx.model.User.remove({      name: 'wmui',    });    console.log(i);    ctx.body = {      success: true,    };  }}module.exports = HomeController;

实现数据库连贯是开始的第一步,前面就能够欢快的实现逻辑了。

如果对egg和sql不太熟悉,下面代码看起来可能有点吃力,能够看下官网的文档简略入手实际一下,egg应用起来很是挺不便的。