乐趣区

关于前端:CMS系统开发egg链接sqlite数据库

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

说下为什么应用 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 应用起来很是挺不便的。

退出移动版