UNPKG

@hiredchina/u_egg_db_base

Version:
345 lines (297 loc) 7.08 kB
# u_egg_db_base ## 提供的方法有 ``` test: { BaseControllerTest, BaseServiceTest, }, core: { BaseController, BaseService }, service: { ActionToken, ApiService, Cache }, contoller: { Agent, Base }, middleware: { ErrorHandler, UserAuth } ``` ### API 层系统 #### service 调用 ##### ActionToken 提供的方法有 + async apply({ data, exp, howLong, secret }) + verify(token, secret) + verify401(token, secret) 调用 `/app/service/actionToken.js` ``` const { service: { ActionToken } } = require('u_egg_db_base'); module.exports = ActionToken; ``` 需要配置 `/config/config.default.js` ``` config.jwt = { secret: config.keys, enable: true, // default is false match: '/jwt', // optional }; ``` `/config/plugin.js` ``` exports.jwt = { enable: true, package: 'egg-jwt', }; ``` ##### Cache 提供的方法有 + async get(key) + async set(key, value, seconds) + async del(key) 调用 `/app/service/cache.js` ``` const { service: { Cache } } = require('u_egg_db_base'); module.exports = Cache; ``` 需要配置 `/config/config.default.js` ``` config.redis = { client: { host: process.env.EGG_REDIS_HOST || '127.0.0.1', port: process.env.EGG_REDIS_PORT || 6379, password: process.env.EGG_REDIS_PASSWORD || '', db: process.env.EGG_REDIS_DB || '0', }, }; ``` `/config/plugin.js` ``` exports.redis = { enable: true, package: 'egg-redis', }; ``` ##### ApiService 提供的方法有 + async getToken(isRefresh) + async agent({ path, method = 'get', data, isRefresh = false, time = 1 }) + async list(payload) + async group(payload) + async save(payload) + async put(payload, _id) + async delete(_id) + getData(result) 调用 `/app/service/api.js` ``` const { service: { ApiService } } = require('u_egg_db_base'); module.exports = ApiService; ``` `/app/service/ActionToken.js` ``` 'use strict'; const { service: { ApiService } } = require('u_egg_db_base'); class EmailService extends ApiService { constructor(ctx) { super(ctx); this._system = 'user'; this._model = 'email'; } } module.exports = EmailService; ``` 需要配置 `Cache` 和 `ActionToken` `/config/config.default.js` ``` config.system = { appid: 'xxxxxxxx', secret: 'xxxxxxxxxxxxxxxxxxxxxxxx', }; config.serverPath = 'http://server.xxxx.com'; ``` #### middleware 调用 ErrorHandler `/app/middleware/error_handler.js` ``` const { middleware: {ErrorHandler} } = require('u_egg_db_base') module.exports = ErrorHandler ``` 需要配置 `/config/config.default.js` ``` config.middleware = [ 'errorHandler' ]; ``` UserAuth 和 ErrorHandler一样,不过需要先配置好 `Cache`, 之后就可以ctx.request.user 获取当前用户 需要配置 `/config/config.default.js` ``` config.middleware = [ 'userAuth' ]; config.userSessionSecret = 'xxxxxx'; //具体根据login系统的配置 ``` I18n 和 ErrorHandler一样,不过需要先配置好 `Cache`, 还有`user`的service, 之后就可以ctx.request.lan 获取当前用户的I18n,以及在请求参数上带有query 带有`lan`的时候同步更新用户的默认I18n. 需要配置 `/config/config.default.js` ``` config.middleware = [ 'userAuth', 'i18nHandler' ]; // 注意 i18nHandler一定要在userAuth 之后 config.userSessionSecret = 'xxxxxx'; //具体根据login系统的配置 ``` #### contoller 调用 ##### Agent 提供的方法有 + async group() + async index() + async show() + async create() + async update() + async destroy() 调用 `/app/contoller/agent.js` ``` const { contoller: { Agent } } = require('u_egg_db_base'); module.exports = Agent; ``` 需要配置 `ApiService` `/app/router.js` ``` module.exports = app => { const { router, controller } = app; const APIV1 = '/api/v1'; router.resources('agent', `${APIV1}/:model`, controller.agent); }; ``` 配置model和系统的关系 `/config/config.default.js` ``` config.model = { support: 'support', phone: 'user', email: 'user', }; ``` ##### Base 提供的方法有 + async agent() + async currentUser() 需要配置 UserAuth 中间件 + async logout() 调用 `/app/contoller/base.js` ``` const { contoller: { Base } } = require('u_egg_db_base'); module.exports = Base; ``` 需要配置 `/app/router.js` ``` module.exports = app => { const { router, controller } = app; const APIV1 = '/api/v1'; router.get(`${APIV1}/base/logout`, controller.base.logout); router.get(`${APIV1}/base/current`, controller.base.currentUser); router.get(`${APIV1}/base/:path`, controller.base.agent); }; ``` ### DB 层系统 #### core 调用 `/app/controller/works.js` ``` const { core: { BaseController } } = require('u_egg_db_base'); class WorkController extends BaseController { constructor(ctx) { super({ ctx, serviceName: 'work', CreateTransfer: { title: { type: 'string', required: true, allowEmpty: false }, industryKey: { type: 'string', required: true, allowEmpty: false }, }, }); } } module.exports = WorkController; ``` `/app/service/works.js` ``` const { core: { BaseService } } = require('u_egg_db_base'); class WorkService extends BaseService { constructor(ctx) { super({ ctx, model: 'Work', updateKeyArr: [ 'companyName', 'companyId', 'companyLine', 'companyLogoimgurl', 'companyIntro', 'industryId', 'industryTitle', 'title', 'startAt', 'endAt', 'isCurrent', 'descriptiont', 'resumeId', 'industryKey' ], }); } } module.exports = WorkService; ``` #### test 调用 `/test/app/controller/works.test.js` ``` const { test: BaseControllerTest } = require('u_egg_db_base') const { assert, app } = require('egg-mock/bootstrap'); const baseUrl = '/api/v1/works'; describe(baseUrl, () => { const baseServiceTest = new BaseControllerTest({ baseUrl, app, assert, baseModel: 'work', checkListKey: [ 'title', 'industryKey' ], whereParam: 'title', willSave: { title: 'title', industryKey: 'industryKey', }, checkSaveKey: [ 'title', 'industryKey' ], willUpdate: { title: 'title', companyName: 'companyName', industryKey: 'industryKey', }, checkUpdateKey: [ 'title', 'companyName', 'industryKey' ], }); describe(`${baseUrl} baseTest`, () => { baseServiceTest.baseTest(); }); }); ``` `/test/app/service/works.test.js` ``` const { test: BaseServiceTest } = require('u_egg_db_base') const { app } = require('egg-mock/bootstrap'); const assert = require('assert-extends'); const baseModel = 'work'; describe(`${baseModel}Service test`, () => { const testListOrder = '`title` asc'; const baseServiceTest = new BaseServiceTest({ app, assert, baseModel, testListOrder, willSave: { title: 'title', industryKey: 'industryKey', }, checkSaveKey: [ 'title', 'industryKey' ], willUpdate: { title: 'title', companyName: 'companyName', industryKey: 'industryKey', }, checkUpdateKey: [ 'title', 'companyName', 'industryKey' ], }); describe('baseTest', () => { baseServiceTest.baseTest(); }); }); ```