2 Star 0 Fork 0

三生石 / dinegg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
index.d.ts 6.75 KB
一键复制 编辑 原始数据 按行查看 历史
三生石 提交于 2024-05-15 22:41 . type: controller method protected
/*
* @copyright: Huang Ding
* @Author: ding-cx
* @Date: 2021-01-29 18:12:25
* @LastEditors: ding
* @LastEditTime: 2022-08-19 10:08:32
* @Description: file content
*/
// {framework_root}/index.d.ts
import * as Egg from "egg";
// 将该上层框架用到的插件 import 进来
import "egg-cors";
import "egg-jwt";
import "./lib/typings/shim.schedule";
import "./lib/typings/shim.validate";
import "./typings/app/extend/application";
import "./typings/app/extend/context";
import "./typings/app/extend/helper";
import "./typings/app/middleware/index";
import "./typings/app/service/index";
import "./typings/config/index";
import "./typings/config/plugin";
import AppCache from "./lib/core/AppCache";
// import "./typings/sequelize";//不需要自定义的sequelize类型定义了。
// ts 这里可以理解成导入一个类。并将这个类的类型提取给ts作为自定义type。然后这个type就可以放在interface上,或者提供给其他interface等。
// context扩展声明,需先自定义type
// type ExtendContextType = typeof ExtendContext;
interface ExtendContextType { }
import { AbstractPermissionAccessControl } from "./decorator";
import DineggAPIClient from "./lib/core/ClusterClient/DineggAPIClient";
/** 装饰器方法函数签名 */
type decoratorMethodSign = (path: string, middlewares?: ((ctx: Egg.Context, next: () => Promise<void>) => Promise<void>)[]) => (target, name, descriptor) => {};
declare module "egg" {
// 跟插件一样拓展 egg ...
// context的扩展添加声明的写法。
interface Context {
/**
* 在ctx上抛出错误,具有特殊的isBizError标识,在中间件单独处理,直接响应给前端消息提示
* - status 500
*/
throw(msg?: string, ...args: any[]): never;
/**
* 在ctx上响应success结果,将终止后续执行。业务侧无需return。在service中可以任意地方执行,执行后即终止。
* 更加适用于api开发,可能不太适合前端接口
* - status 200
*/
success(data: any, code?: number, msg?: string): never;
/**
* 与success对应
* 抛出业务上的错误响应,但是http响应400,与throw不同,throw响应是500
* - status 400
*/
error(msg: string, code?: number, msgDetails?: string[]): never;
/** jwt token 字符串 */
jwtToken?: string;
}
interface EggAppConfig {
/** jwt登录状态校验中间件的配置 */
jwtLogin: {
/** dinegg框架是否默认启用该中间件 */
enable?: boolean;
/** 路由白名单列表 */
routeWhiteList?: string[];
/** 是否全局使用的中间件,全局将判断跳过白名单。否则将每次经过本中间件进行判断 */
isGlobal?: boolean;
/** jwt login token的过期时间 单位秒 在sign时可使用。*/
expires?: number;
[key: string]: any;
};
/** 中间件,捕获所有内部未捕获的异常用,的配置 */
catchNoCatchError: {
enable?: boolean;
};
/** 补充egg-schedule插件的dts声明 */
schedule: {
/** 其他目录写的定时器,传入绝对路径full path列表 */
directory: string[];
};
/** 模块自定义loader配置 */
modules: {
/** 是否启用module */
enable?: boolean;
/** 导入的模块名称 */
imports?: string[];
};
customLogger: {
/** 自定义app-start启动时各种参数、配置的日志记录 */
appStartLogger: {
file: string;
};
};
}
interface Application {
/** 外部实现的权限控制类挂载在app上,该类必须实现了抽象类 */
PermissionAccessControl: typeof AbstractPermissionAccessControl;
/** egg框架内的cluster方法 */
cluster: (clientClass: Function, options?: { responseTimeout: number; maxWaitTime?: number }) => any;
/** 进程间socket直连通讯实例 */
dineggApiClient: DineggAPIClient;
}
interface Agent {
model: IModel;
/** 简单的内存缓存操作类map */
cache: AppCache;
/** egg框架内的cluster方法 */
cluster: (clientClass: Function, options?: { responseTimeout: number; maxWaitTime?: number }) => any;
/** 进程间socket直连通讯实例 */
dineggApiClient: DineggAPIClient;
}
interface IHelper {
/** 处理sequelize的错误信息可输出给前端 */
util_create_sequelize_error(error: any): {
name: string;
msg: string;
description: object;
};
}
/** 为controller添加响应方法 */
interface Controller {
/**
* 发送响应,其他几个api都是基于send封装基础结构
*
* @param {*} data
* @param {number} [status]
* @param {string} [msg]
* @param {string[]} [errDetails]
* @return {*} {IResponseBodyData}
* @memberof Controller
*/
protected send<T extends any>(data: T, status?: number, msg?: string, errDetails?: string[]): IResponseBodyData<T>;
/**
*ctx发送成功的响应
* - 不能在router中直接调用
* @example {code:20000,msg:"success",data:any}
* @param {*} data
* @memberof Controller
*/
protected success<T extends any>(data: T): IResponseBodyData<T>;
/**
*发送警告的响应,主体响应仍然是成功的,但是将携带一个弃用或变更之类的警告,提醒caller,该api将发生变化
*
* @param {*} data 响应数据
* @param {string} [msg] 警告信息,比如api将弃用
* @return {*} {IResponseBodyData}
* @memberof Controller
*/
protected warning<T extends any>(data: T, msg?: string): IResponseBodyData<T>;
/**
*
*ctx发送错误的响应
* - 主要提供错误信息描述。此方法的msg是叠加拼接的字符串。data常为null,特殊情况太多错误信息可传递data
*
* - 不能在router中直接调用
*
* @example {code:50000,msg:string,data:null,is_error:true}
* @param {string} msg 错误提示消息
* @param {number} [code] 错误码
* @param {stirng[]} [errDetails] 错误详情,字符串数组
* @return {*} {IResponseBodyData}
* @memberof Controller
*/
protected error(msg: string, code?: number, errDetails?: stirng[]): IResponseBodyData<null>;
/**
*
*ctx发送错误的响应 设置响应码400,对浏览器前端更友好
* - 主要提供错误信息描述。此方法的msg是叠加拼接的字符串。data常为null,特殊情况太多错误信息可传递data
*
* - 不能在router中直接调用
*
* @example {code:50000,msg:string,data:null,is_error:true}
* @param {string} msg 错误提示消息
* @param {number} [code] 错误码
* @param {stirng[]} [errDetails] 错误详情,字符串数组
* @return {*} {IResponseBodyData}
* @memberof Controller
*/
protected errorBy400(msg: string, code?: number, errDetails?: stirng[]): IResponseBodyData;
}
/** json 响应body规范 */
interface IResponseBodyData<T extends any = any> {
data: T;
code: number;
msg: string | null;
details?: string[];
}
}
// 将 Egg 整个 export 出去
export = Egg;
NodeJS
1
https://gitee.com/dingiyan/dinegg.git
git@gitee.com:dingiyan/dinegg.git
dingiyan
dinegg
dinegg
master

搜索帮助