瀏覽代碼

自定义异常,异常细分

lrf 11 月之前
父節點
當前提交
3ca06e49ec

+ 153 - 0
package-lock.json

@@ -17,6 +17,7 @@
         "@midwayjs/jwt": "^3.16.1",
         "@midwayjs/koa": "^3.12.0",
         "@midwayjs/logger": "^3.1.0",
+        "@midwayjs/redis": "^3.16.0",
         "@midwayjs/validate": "^3.12.0",
         "@types/crypto-js": "^4.2.2",
         "crypto-js": "^4.2.0",
@@ -728,6 +729,11 @@
       "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
       "dev": true
     },
+    "node_modules/@ioredis/commands": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@ioredis/commands/-/commands-1.2.0.tgz",
+      "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="
+    },
     "node_modules/@istanbuljs/load-nyc-config": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -1271,6 +1277,17 @@
         "node": ">=12"
       }
     },
+    "node_modules/@midwayjs/redis": {
+      "version": "3.16.0",
+      "resolved": "https://registry.npmmirror.com/@midwayjs/redis/-/redis-3.16.0.tgz",
+      "integrity": "sha512-wLftjBWgFJdS14gxJzS/86hzcvtDNhqLGkB/qbdedfdxim/DSNR7YBPEqJY7FboR5Ix2oJ427iO4t2ttpyEfYQ==",
+      "dependencies": {
+        "ioredis": "5.4.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/@midwayjs/session": {
       "version": "3.16.0",
       "resolved": "https://registry.npmmirror.com/@midwayjs/session/-/session-3.16.0.tgz",
@@ -2540,6 +2557,14 @@
         "mimic-response": "^1.0.0"
       }
     },
+    "node_modules/cluster-key-slot": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
+      "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz",
@@ -2909,6 +2934,14 @@
       "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz",
       "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
     },
+    "node_modules/denque": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/denque/-/denque-2.1.0.tgz",
+      "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
     "node_modules/depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@@ -4246,6 +4279,25 @@
         "node": ">=8.0.0"
       }
     },
+    "node_modules/ioredis": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmmirror.com/ioredis/-/ioredis-5.4.1.tgz",
+      "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==",
+      "dependencies": {
+        "@ioredis/commands": "^1.1.1",
+        "cluster-key-slot": "^1.1.0",
+        "debug": "^4.3.4",
+        "denque": "^2.1.0",
+        "lodash.defaults": "^4.2.0",
+        "lodash.isarguments": "^3.1.0",
+        "redis-errors": "^1.2.0",
+        "redis-parser": "^3.0.0",
+        "standard-as-callback": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=12.22.0"
+      }
+    },
     "node_modules/is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -5383,11 +5435,21 @@
       "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
+    "node_modules/lodash.defaults": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+      "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
+    },
     "node_modules/lodash.includes": {
       "version": "4.3.0",
       "resolved": "https://registry.npmmirror.com/lodash.includes/-/lodash.includes-4.3.0.tgz",
       "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
     },
+    "node_modules/lodash.isarguments": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+      "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="
+    },
     "node_modules/lodash.isboolean": {
       "version": "3.0.3",
       "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
@@ -6438,6 +6500,25 @@
         "node": ">=8"
       }
     },
+    "node_modules/redis-errors": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/redis-errors/-/redis-errors-1.2.0.tgz",
+      "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/redis-parser": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/redis-parser/-/redis-parser-3.0.0.tgz",
+      "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==",
+      "dependencies": {
+        "redis-errors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/reflect-metadata": {
       "version": "0.2.2",
       "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
@@ -6830,6 +6911,11 @@
         "node": ">=8"
       }
     },
+    "node_modules/standard-as-callback": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
+      "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="
+    },
     "node_modules/statuses": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
@@ -8098,6 +8184,11 @@
       "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
       "dev": true
     },
+    "@ioredis/commands": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@ioredis/commands/-/commands-1.2.0.tgz",
+      "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="
+    },
     "@istanbuljs/load-nyc-config": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -8528,6 +8619,14 @@
         "supertest": "6.3.3"
       }
     },
+    "@midwayjs/redis": {
+      "version": "3.16.0",
+      "resolved": "https://registry.npmmirror.com/@midwayjs/redis/-/redis-3.16.0.tgz",
+      "integrity": "sha512-wLftjBWgFJdS14gxJzS/86hzcvtDNhqLGkB/qbdedfdxim/DSNR7YBPEqJY7FboR5Ix2oJ427iO4t2ttpyEfYQ==",
+      "requires": {
+        "ioredis": "5.4.1"
+      }
+    },
     "@midwayjs/session": {
       "version": "3.16.0",
       "resolved": "https://registry.npmmirror.com/@midwayjs/session/-/session-3.16.0.tgz",
@@ -9577,6 +9676,11 @@
         "mimic-response": "^1.0.0"
       }
     },
+    "cluster-key-slot": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
+      "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="
+    },
     "co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz",
@@ -9864,6 +9968,11 @@
       "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz",
       "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
     },
+    "denque": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/denque/-/denque-2.1.0.tgz",
+      "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
+    },
     "depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@@ -10902,6 +11011,22 @@
         "through": "^2.3.6"
       }
     },
+    "ioredis": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmmirror.com/ioredis/-/ioredis-5.4.1.tgz",
+      "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==",
+      "requires": {
+        "@ioredis/commands": "^1.1.1",
+        "cluster-key-slot": "^1.1.0",
+        "debug": "^4.3.4",
+        "denque": "^2.1.0",
+        "lodash.defaults": "^4.2.0",
+        "lodash.isarguments": "^3.1.0",
+        "redis-errors": "^1.2.0",
+        "redis-parser": "^3.0.0",
+        "standard-as-callback": "^2.1.0"
+      }
+    },
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -11795,11 +11920,21 @@
       "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
+    "lodash.defaults": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+      "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
+    },
     "lodash.includes": {
       "version": "4.3.0",
       "resolved": "https://registry.npmmirror.com/lodash.includes/-/lodash.includes-4.3.0.tgz",
       "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
     },
+    "lodash.isarguments": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+      "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="
+    },
     "lodash.isboolean": {
       "version": "3.0.3",
       "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
@@ -12633,6 +12768,19 @@
         "strip-indent": "^3.0.0"
       }
     },
+    "redis-errors": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/redis-errors/-/redis-errors-1.2.0.tgz",
+      "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="
+    },
+    "redis-parser": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/redis-parser/-/redis-parser-3.0.0.tgz",
+      "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==",
+      "requires": {
+        "redis-errors": "^1.0.0"
+      }
+    },
     "reflect-metadata": {
       "version": "0.2.2",
       "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
@@ -12948,6 +13096,11 @@
         }
       }
     },
+    "standard-as-callback": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
+      "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="
+    },
     "statuses": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",

+ 1 - 0
package.json

@@ -12,6 +12,7 @@
     "@midwayjs/jwt": "^3.16.1",
     "@midwayjs/koa": "^3.12.0",
     "@midwayjs/logger": "^3.1.0",
+    "@midwayjs/redis": "^3.16.0",
     "@midwayjs/validate": "^3.12.0",
     "@types/crypto-js": "^4.2.2",
     "crypto-js": "^4.2.0",

+ 21 - 0
src/config/config.default.ts

@@ -6,4 +6,25 @@ export default {
   koa: {
     port: 19700,
   },
+  jwt: {
+    secret: 'Ziyouyanfa!@#',
+    expiresIn: 3600, // 3600
+  },
+  i18n: {
+    defaultLocale: 'zh-cn',
+    fallbacks: {
+      'en*': 'en_us',
+      'zh*': 'zh-cn',
+    },
+    // 后期可以设置成数据库添加的方式
+    localeTable: {
+      en_us: {
+        default: require('../locales/en_us/defaults'),
+      },
+      zh_cn: {
+        default: require('../locales/zh_cn/defaults'),
+        login: require('../locales/zh_cn/login'),
+      },
+    },
+  },
 } as MidwayConfig;

+ 11 - 1
src/config/config.local.ts

@@ -1,5 +1,7 @@
 import { MidwayConfig } from '@midwayjs/core';
-
+const redisHost = '127.0.0.1';
+const redisPwd = '123456';
+const redisDB = 6;
 export default {
   // use for cookie sign key, should change to your own and keep security
   keys: '1715577385578_8567',
@@ -17,4 +19,12 @@ export default {
       },
     },
   },
+  redis: {
+    client: {
+      port: 6379, // Redis port
+      host: redisHost, // Redis host
+      password: redisPwd,
+      db: redisDB,
+    },
+  },
 } as MidwayConfig;

+ 10 - 1
src/configuration.ts

@@ -5,11 +5,19 @@ import * as info from '@midwayjs/info';
 import { join } from 'path';
 import { ReportMiddleware } from './middleware/report.middleware';
 import * as axios from '@midwayjs/axios';
+import * as redis from '@midwayjs/redis';
+import * as jwt from '@midwayjs/jwt';
+import * as i18n from '@midwayjs/i18n';
+import { CustomErrorFilter } from './filter/customError.filter';
+import { SetLocaleToCtxMiddleware } from './middleware/setLocaleToCtx.middleware';
 @Configuration({
   imports: [
     koa,
     axios,
     validate,
+    redis,
+    jwt,
+    i18n,
     {
       component: info,
       enabledEnvironment: ['local'],
@@ -23,6 +31,7 @@ export class MainConfiguration {
 
   async onReady() {
     // add middleware
-    this.app.useMiddleware([ReportMiddleware]);
+    this.app.useMiddleware([ReportMiddleware, SetLocaleToCtxMiddleware]);
+    this.app.useFilter([CustomErrorFilter]);
   }
 }

+ 4 - 1
src/controller/home.controller.ts

@@ -1,6 +1,7 @@
 import { All, Controller, Get, Inject, Put } from '@midwayjs/core';
 import { Context } from '@midwayjs/koa';
 import { ProxyService } from '../service/proxy.service';
+import { FrameworkErrorEnum, LoginError } from '../error/login.error';
 @Controller('/')
 export class HomeController {
   @Inject()
@@ -20,7 +21,9 @@ export class HomeController {
   @All('/**')
   async proxy() {
     // const rb = this.service.getRequstBase();
-    return await this.service.toProxy();
+    // 1.
+    throw new LoginError(FrameworkErrorEnum.TEST);
+    // return await this.service.toProxy();
     // return false;
     // return 'in proxy';
   }

+ 18 - 0
src/error/login.error.ts

@@ -0,0 +1,18 @@
+import { MidwayError, registerErrorCode } from '@midwayjs/core';
+
+export enum LoginErroCode {
+  TEST = 'TEST',
+}
+export const FrameworkErrorEnum = registerErrorCode(
+  'LoginError',
+  LoginErroCode
+);
+
+export class LoginError extends MidwayError {
+  detail: any;
+  group: string;
+  constructor(errcode: string) {
+    super(errcode);
+    this.group = 'login';
+  }
+}

+ 9 - 0
src/error/service.error.ts

@@ -0,0 +1,9 @@
+import { MidwayError } from '@midwayjs/core';
+
+export class ServiceError extends MidwayError {
+  group: string;
+  constructor(errcode: string) {
+    super(errcode);
+    this.group = 'service';
+  }
+}

+ 40 - 0
src/filter/customError.filter.ts

@@ -0,0 +1,40 @@
+import {
+  ApplicationContext,
+  Catch,
+  IMidwayContainer,
+  Inject,
+} from '@midwayjs/core';
+import { Context } from '@midwayjs/koa';
+import { LoginError } from '../error/login.error';
+import { ServiceError } from '../error/service.error';
+import { MidwayI18nService } from '@midwayjs/i18n';
+
+interface CustomError extends Error {
+  group: string;
+}
+
+@Catch([LoginError, ServiceError])
+export class CustomErrorFilter {
+  @Inject()
+  ctx: Context;
+  @ApplicationContext()
+  applicationContext: IMidwayContainer;
+  // @Inject()
+  // i18n: MidwayI18nService;
+  async catch(err: CustomError, ctx: Context) {
+    // 所有的未分类错误会到这里
+    const i18n = await this.applicationContext.getAsync(MidwayI18nService);
+    const errmsg = i18n.translate(err.message, {
+      locale: this.ctx.locale,
+      group: err.group,
+    });
+    const result: any = {
+      errcode: err.message,
+      errmsg,
+    };
+    if (process.env.NODE_ENV !== 'production') {
+      result.details = err.stack;
+    }
+    return result;
+  }
+}

+ 3 - 0
src/locales/en_us/defaults.ts

@@ -0,0 +1,3 @@
+export default {
+  locale: 'language is: {locale}',
+};

+ 3 - 0
src/locales/zh_cn/defaults.ts

@@ -0,0 +1,3 @@
+export default {
+  locale: '当前语言为: {locale}',
+};

+ 12 - 0
src/locales/zh_cn/login.ts

@@ -0,0 +1,12 @@
+import { toUpper } from 'lodash';
+// 需要与 对应的 自定义errorcode 前缀对应 都经过 toUpper处理
+const codePrefix = 'LoginError';
+const obj = {
+  TEST: '测试异常',
+};
+const listObject = {};
+Object.keys(obj).map(i => {
+  const val = obj[i];
+  listObject[`${toUpper(codePrefix)}_${toUpper(i)}`] = val;
+});
+export default listObject;

+ 32 - 0
src/middleware/setLocaleToCtx.middleware.ts

@@ -0,0 +1,32 @@
+import { IMiddleware } from '@midwayjs/core';
+// import { Middleware } from '@midwayjs/decorator';
+import { Middleware } from '@midwayjs/core';
+import { NextFunction, Context } from '@midwayjs/koa';
+import { head, last } from 'lodash';
+@Middleware()
+export class SetLocaleToCtxMiddleware
+  implements IMiddleware<Context, NextFunction>
+{
+  resolve() {
+    return async (ctx: Context, next: NextFunction) => {
+      const cookies = ctx.request.headers.cookie;
+      try {
+        let arr = cookies.split(';');
+        arr = arr.filter(f => f.includes('locale='));
+        // 没找到locale就默认使用中文
+        if (arr.length <= 0) arr = ['locale=zh-cn'];
+        const a2 = head(arr).split('=');
+        const locale = last(a2);
+        ctx.locale = locale;
+      } catch (error) {
+        ctx.locale = 'zh-cn';
+      }
+
+      await next();
+    };
+  }
+
+  static getName(): string {
+    return 'setLocale';
+  }
+}

+ 22 - 0
src/service/singleSignOn.service.ts

@@ -0,0 +1,22 @@
+import { Config, Inject, InjectClient, Provide } from '@midwayjs/core';
+import { JwtService } from '@midwayjs/jwt';
+import { Context } from '@midwayjs/koa';
+import { get } from 'lodash';
+import { LoginError } from '../error/login.error';
+
+@Provide()
+export class SingleSignOnService {
+  @Inject()
+  ctx: Context;
+  @Inject()
+  jwtService: JwtService;
+  async index() {
+    let user;
+    const token: any = get(this.ctx.request, 'header.token');
+    if (token) {
+      const data = this.jwtService.decodeSync(token);
+      if (data) user = data;
+    }
+    if (!user) throw new LoginError('TEST');
+  }
+}