eggjs中使用sequelize 对行为日志进行分表读写

model 层

app\model\system_log.js

/* indent size: 2 */

module.exports = (app,sequelize,modelName) => {
  
  const DataTypes = app.Sequelize;

  const Model = app.model.define(modelName || 'system_log', {
    id: {
      type: DataTypes.INTEGER(10).UNSIGNED,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    uid: {
      type: DataTypes.INTEGER(10).UNSIGNED,
      allowNull: true,
      defaultValue: '0'
    },
    url: {
      type: DataTypes.STRING(1500),
      allowNull: false,
      defaultValue: ''
    },
    method: {
      type: DataTypes.STRING(50),
      allowNull: false
    },
    title: {
      type: DataTypes.STRING(100),
      allowNull: true,
      defaultValue: ''
    },
    ip: {
      type: DataTypes.STRING(50),
      allowNull: false,
      defaultValue: ''
    },
    useragent: {
      type: DataTypes.STRING(255),
      allowNull: true,
      defaultValue: ''
    },
    create_time: {
      type: DataTypes.DATE,
      allowNull: true
    }
  }, {
    tableName: modelName
  });

  Model.associate = function() {

  }

  return Model;
};


公共处理函数

app\extend\application.js

module.exports = {
    

    //日志表模型分表
    async creatTableIfNotExist(modelBase, timeStr) {
        console.log(modelBase)
        console.log(timeStr)
        const modelName = `${modelBase}_${timeStr}`;
        const existTable = this.model.models[modelName];
        if (existTable) {
            return existTable;
        }

        let tableModel;
        switch (modelBase) {
            case 'system_log':{
                tableModel = require('../model/system_log');
                break;
            }
                

        }
        if (tableModel && modelName) {
            tableModel(this, this.model, modelName);
            await this.model.sync({ force: false });
            return this.model.models[modelName]
        }

        return null;
    }
};

service层

app\service\systemLog.js

'use strict';
const Service = require("egg").Service;

class systemLogService extends Service {

    get tableName() { //定义表名
       return "system_log";
    }

    get tableSuffix(){//定义表后缀
        var date = new Date();
        var Year = 0;
        var Month = 0;
        var Day = 0;
        var CurrentDate = "";
        Year = date.getFullYear(); //获取完整的年份(4位)
        Month = date.getMonth() + 1;//获取月份
        Day = date.getDate();

        CurrentDate += Year;
        if (Month >= 10) {
            CurrentDate += Month;
        } else {
            CurrentDate += "0" + Month;
        }
        if (Day >= 10) {
            CurrentDate += Day ;
        } else {
            CurrentDate += "0" + Day ;
        }
        return `${CurrentDate}`;
    }

    async index() {
        const ctx = this.ctx;   
        let model = await this.app.creatTableIfNotExist(this.tableName,this.tableSuffix);
        console.log(model)
        let res = model.findAll();
        return res;
    }


  



}


module.exports = systemLogService; //暴露接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值