error_handler.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 { AdminUser: model } = ctx.model;
  13. const date = moment().format('YYYY-MM-DD HH:mm:ss');
  14. if (method !== 'GET') {
  15. // token
  16. const tokenstr = ctx.request.header.authorization;
  17. if (tokenstr) {
  18. const token = tokenstr.substring(7);
  19. decode = ctx.app.jwt.verify(token, ctx.app.config.secret);
  20. } else {
  21. const { acct } = ctx.request.body;
  22. const res = await model.find({ acct });
  23. decode = res[0];
  24. }
  25. const str = url.split('/');
  26. for (let i = 0; i < str.length; i++) {
  27. const e = str[i];
  28. if (e !== '' && e !== 'api') {
  29. if (e === 'create' || e === 'update' || e === 'delete' || e === 'upload' || e === 'login') {
  30. methods = routerMethod[e];
  31. if (e === 'delete') {
  32. break;
  33. }
  34. } else {
  35. mondel = routerMondel[e];
  36. }
  37. }
  38. }
  39. jsons = { mondel, method: methods, data: body };
  40. }
  41. try {
  42. if (method !== 'GET') {
  43. jsons.result = '成功';
  44. if (decode) {
  45. jsons.userName = decode.userName;
  46. jsons.acct = decode.acct;
  47. }
  48. jsons.date = date;
  49. await ctx.service.log.create(jsons);
  50. }
  51. await next();
  52. } catch (err) {
  53. if (method !== 'GET') {
  54. jsons.result = '失败';
  55. if (decode) {
  56. jsons.userName = decode.userName || '';
  57. jsons.acct = decode.acct;
  58. }
  59. jsons.date = date;
  60. await ctx.service.log.create(jsons);
  61. }
  62. const { message } = err;
  63. let json = {
  64. errcode: -1001,
  65. errmsg: message,
  66. };
  67. if (err.code !== 'ERR_ASSERTION') {
  68. json = JSON.parse(message);
  69. }
  70. ctx.body = json;
  71. ctx.status = 400;
  72. }
  73. };
  74. };