Browse Source

添加日志服务

asd123a20 3 years ago
parent
commit
559c8074d6

+ 23 - 0
app/controller/log.js

@@ -0,0 +1,23 @@
+'use strict';
+
+const Controller = require('egg').Controller;
+
+class LogController extends Controller {
+  async create() {
+    const { ctx } = this;
+    const res = await ctx.service.log.create(ctx.request.body);
+    ctx.body = res;
+  }
+  async del() {
+    const { ctx } = this;
+    const res = await ctx.service.log.del(ctx.params);
+    ctx.body = res;
+  }
+  async query() {
+    const { ctx } = this;
+    const res = await ctx.service.log.query(ctx.query);
+    ctx.body = res;
+  }
+}
+
+module.exports = LogController;

+ 31 - 0
app/middleware/error_handler.js

@@ -1,9 +1,40 @@
 'use strict';
+const routerMethod = require('../../config/routerMethod');
+const routerMondel = require('../../config/routerMondel');
 module.exports = () => {
   return async function errorHandler(ctx, next) {
+    let jsons = { };
+    const { url, method, body } = ctx.request;
+    if (method !== 'GET') {
+      const str = url.split('/');
+      let mondel;
+      let method;
+      for (let i = 0; i < str.length; i++) {
+        const e = str[i];
+        if (e !== '' && e !== 'api') {
+          if (e === 'create' || e === 'update' || e === 'delete') {
+            method = routerMethod[e];
+            if (e === 'delete') {
+              break;
+            }
+          } else {
+            mondel = routerMondel[e];
+          }
+        }
+      }
+      jsons = { mondel, method, data: body };
+    }
     try {
       await next();
+      if (method !== 'GET') {
+        jsons.result = '成功';
+        await ctx.service.log.create(jsons);
+      }
     } catch (err) {
+      if (method !== 'GET') {
+        jsons.result = '失败';
+        await ctx.service.log.create(jsons);
+      }
       const { message } = err;
       let json = {
         errcode: -1001,

+ 28 - 0
app/model/Log.js

@@ -0,0 +1,28 @@
+'use strict';
+module.exports = app => {
+  const { mongoose } = app;
+  const { Schema } = mongoose;
+  const LogSchema = new Schema({
+    // 模块
+    mondel: {
+      type: String,
+    },
+    // 类型
+    method: {
+      type: String,
+    },
+    // 结果
+    result: {
+      type: String,
+    },
+    // 数据
+    data: {
+      type: Object,
+    },
+    // 创建时间
+    createAt: {
+      type: String,
+    },
+  });
+  return mongoose.model('Log', LogSchema);
+};

+ 4 - 5
app/router.js

@@ -52,11 +52,10 @@ module.exports = app => {
   router.delete('/api/files/delete/:id', jwt, controller.files.del);
   router.post('/api/files/upload', jwt, controller.files.upload);
   router.get('/api/files/query', controller.files.query);
-  // 资源
-  // router.post('/api/resource/create', jwt, controller.resource.create);
-  // router.post('/api/resource/update', jwt, controller.resource.update);
-  // router.delete('/api/resource/delete/:id', jwt, controller.resource.del);
-  // router.get('/api/resource/query', controller.resource.query);
+  // 日志
+  router.post('/api/log/create', jwt, controller.log.create);
+  router.delete('/api/log/delete/:id', jwt, controller.log.del);
+  router.get('/api/log/query', controller.log.query);
   // 友情链接
   router.post('/api/links/create', jwt, controller.links.create);
   router.post('/api/links/update', jwt, controller.links.update);

+ 53 - 0
app/service/log.js

@@ -0,0 +1,53 @@
+'use strict';
+
+const Service = require('egg').Service;
+const assert = require('assert');
+const moment = require('moment');
+class LogService extends Service {
+  async create({ mondel, method, data, result }) {
+    assert(mondel, '模块不存在');
+    assert(method, '类型不存在');
+    assert(data, '数据不存在');
+    assert(result, '结果不存在');
+    const { Log: model } = this.ctx.model;
+    const createAt = moment().format('x');
+    try {
+      await model.create({ data, method, createAt, mondel, result });
+      return { errmsg: '', errcode: 0 };
+    } catch (error) {
+      console.log(error);
+      throw new Error({ errcode: -2001, errmsg: '添加失败' });
+    }
+  }
+  async del({ id }) {
+    assert(id, 'id不存在');
+    const { Log: model } = this.ctx.model;
+    try {
+      await model.findById(id).remove();
+      return { errmsg: '', errcode: 0 };
+    } catch (error) {
+      throw new Error({ errcode: -2001, errmsg: '删除失败' });
+    }
+  }
+  async query({ skip, limit, mondel, method }) {
+    const { Log: model } = this.ctx.model;
+    const filter = {};
+    if (mondel) filter.mondel = mondel;
+    if (method) filter.method = method;
+    try {
+      const total = await model.find({ ...filter });
+      let res;
+      if (skip && limit) {
+        res = await model.find({ ...filter }).skip(Number(skip) * Number(limit)).limit(Number(limit));
+      } else {
+        res = await model.find({ ...filter });
+      }
+      return { errmsg: '', errcode: 0, data: res, total: total.length };
+    } catch (error) {
+      console.log(error);
+      throw new Error({ errcode: -2001, errmsg: '查询失败' });
+    }
+  }
+}
+
+module.exports = LogService;

+ 1 - 1
config/config.default.js

@@ -65,7 +65,7 @@ module.exports = appInfo => {
     url: 'mongodb://127.0.0.1:27017/example',
     options: {},
   };
-  // 异常捕获
+  // 异常捕获 路由拦截
   config.middleware = [ 'errorHandler' ];
   config.errorHandler = {
     match: '/api',

+ 9 - 0
config/routerMethod.js

@@ -0,0 +1,9 @@
+/* eslint-disable quote-props */
+'use strict';
+
+/** @type Egg.EggPlugin */
+module.exports = {
+  'create': '添加',
+  'update': '修改',
+  'delete': '删除',
+};

+ 16 - 0
config/routerMondel.js

@@ -0,0 +1,16 @@
+/* eslint-disable quote-props */
+'use strict';
+
+/** @type Egg.EggPlugin */
+module.exports = {
+  'adminUser': '系统用户',
+  'role': '系统角色',
+  'menu': '菜单管理',
+  'column': '栏目管理',
+  'content': '内容管理',
+  'page': '单页管理',
+  'files': '文件管理',
+  'links': '系统用户',
+  'banner': '轮播图管理',
+  'configuration': '站点配置',
+};