代码拉取完成,页面将自动刷新
dinegg framework is base eggjs, use typescript develop.
$ npm install
$ npm test
publish your framework to npm, then change app's framework config:
// {app_root}/index.js
{
"name": "my-project",
"egg": {
"framework": "dinegg"
}
}
添加多进程直连socket通讯机制逻辑
使用指南:
//支持的文件
**/*.service.ts
**/*.controller.ts
**/router.ts
task/*.ts
schedule/*.ts
app.ts
agent.ts
// 配置文件
config.modules = {
imports: ["mod_user","cat"],//配置需要使用的模块
enable:true,//此属性配置用于开启module。开启后必须遵从本文档指南撰写代码,否则将和egg原来的方式造成冲突。
};
// tshelper.js
require('dinegg/lib/tshelper')([moduleName1,mod2])
//service
this.ctx.service.
//controller
app.controller.
//schedule 定时任务,从模块目录下的task/或者schedule/目录读取任务文件。只匹配模块下的第一层目录。*/task/task1.ts 和 */schedule/task2.ts
装饰器可以从 controllerDecorator 和 serviceDecorator 导入,效果一致!
// controller.ts
import { permission, get } from "dinegg/decorator";
class Controller {
@get("/api/abc")
@permission(["abc:bcd"])
async method() {}
}
// 自定义权限控制实现类
import { AbstractPermissionAccessControl } from "egg";
export default class RoleAccessControl2 extends AbstractPermissionAccessControl {
async main() {
const userRole = this.ctx.request.query.myRole;
console.log("userRole", userRole);
if (this.permId.includes(userRole)) {
return true;
} else {
throw new Error(`抱歉,您没有权限!需要的权限:${this.permId.toString()}`);
}
}
}
// app.ts 在app.ts中绑定后即可使用。在控制器或service的方法上绑定装饰器,如果验证权限失败会抛出错误。
import { Application, IBoot } from "egg";
import PermissionAccessControl from "./PermissionAccessControl";
// import * as path from "path"
export default class AppInit implements IBoot {
private readonly app: Application;
constructor(_app: Application) {
this.app = _app;
this.app.PermissionAccessControl = PermissionAccessControl;
}
async willReady() {}
}
this.app.cache.set()
this.app.cache.get()
this.app.cache.remove()
this.app.cache.clear()
使用方式 dts 声明
/**
* 添加一个缓存
*
* @param {string} key 字段key,注意不能重复
* @param {*} value
* @param {number} seconds 缓存时间,按s为单位 默认20s
* @memberof AppCache
*/
set(key: string, value: any, expire: number = 20): boolean;
/**
* 获取缓存
*
* @template T
* @param {string} key
* @return {*} {(T | null)}
* @memberof AppCache
*/
get<T extends any>(key: string): T | null;
remove(key: string): boolean;
delete(key: string): boolean;
/** 移除已过期的key value */
removeExpired(): boolean;
/** 重置整个map为新的,原来的放弃,被垃圾回收 */
reset(): void;
/** 重置整个map为新的,原来的放弃,被垃圾回收 */
clear(): void;
egg多进程默认使用ipc在agent与app之间通讯,这是需要通过node默认的cluster机制,由master中转来实现的。 dinegg参考egg官方文档,实现了一套直连通讯机制接口
Please open an issue here.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。