error_handler.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. 'use strict';
  2. const routerMethod = require('../../config/routerMethod');
  3. const routerMondel = require('../../config/routerMondel');
  4. const moment = require('moment');
  5. module.exports = () => {
  6. return async function errorHandler(ctx, next) {
  7. let jsons = { };
  8. const { url, method, body } = ctx.request;
  9. let mondel = '';
  10. let methods = '';
  11. let decode = {};
  12. const date = moment().format('YYYY-MM-DD HH:mm:ss');
  13. if (url.indexOf('power') === -1 && method !== 'GET') {
  14. // token
  15. const tokenstr = ctx.request.header.authorization;
  16. const token = tokenstr.substring(7);
  17. decode = ctx.app.jwt.verify(token, ctx.app.config.secret);
  18. const str = url.split('/');
  19. for (let i = 0; i < str.length; i++) {
  20. const e = str[i];
  21. if (e !== '' && e !== 'api') {
  22. if (e === 'create' || e === 'update' || e === 'delete' || e === 'upload') {
  23. methods = routerMethod[e];
  24. if (e === 'delete') {
  25. break;
  26. }
  27. } else {
  28. mondel = routerMondel[e];
  29. }
  30. }
  31. }
  32. jsons = { mondel, method: methods, data: body };
  33. }
  34. try {
  35. if (method !== 'GET' && url.indexOf('power') === -1) {
  36. jsons.result = '成功';
  37. jsons.userName = decode.userName;
  38. jsons.acct = decode.acct;
  39. jsons.date = date;
  40. await ctx.service.log.create(jsons);
  41. }
  42. await next();
  43. } catch (err) {
  44. if (method !== 'GET' && url.indexOf('power') === -1) {
  45. jsons.result = '失败';
  46. jsons.userName = decode.userName;
  47. jsons.acct = decode.acct;
  48. jsons.date = date;
  49. await ctx.service.log.create(jsons);
  50. }
  51. const { message } = err;
  52. let json = {
  53. errcode: -1001,
  54. errmsg: message,
  55. };
  56. if (err.code !== 'ERR_ASSERTION') {
  57. json = JSON.parse(message);
  58. }
  59. ctx.body = json;
  60. ctx.status = 400;
  61. }
  62. };
  63. };