Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
egg-controller
Advanced tools
export class HomeController extends Controller {
@route('/')
hi() {
return `hi, egg`;
}
}
tnpm i -S egg-controller
export default {
...
aop: { // 需要同时开启,controller插件依赖
enable: true,
package: 'egg-aop',
},
controller: {
enable: true,
package: 'egg-controller',
},
...
};
{
...
controller: {
// 是否自动加载controller目录下的文件,require,不会挂载到ctx
autoLoad: true,
// controller路径,支持数组
ctrlDir: path.join('app', 'controller') as string | string[],
// 生成前端SDK配置
genSDK: {
// 是否开启,默认关闭
enable: false,
// 生成SDK的文件类型,默认 ts
type: 'ts' as 'ts' | 'js',
// 前端SDK的生成路径
SDKDir: path.join('app', 'assets', 'service'),
// 生成模板路径,如没有模板文件,会默认在前端SDK路径下生成默认模板(试验版,近期会用模板引擎重构)
templatePath: '',
// 针对需要生成SDK的路由的过滤正则,可针对路由url过滤
filter: [/^\/api\//g] as RegExp[],
},
},
...
}
默认配置下,在 app/controller 中创建 controller 文件:
export class HomeController extends Controller { // 如果不需要访问ctx,则不需要继承
@route('/api/xxx', { name: '获取XXX数据' })
async getXXX(size: number, page: number) {
return 'homeIndex';
}
}
支持形式:
@route('/api/xxx') // 生成 GET /api/xxx
@route('POST /api/xxx') // 生成 POST /api/xxx,支持 GET/POST/PUT/DELETE/PATCH
@route('PUT /api/xxx', { name: '修改xxx' })
@route({ url: '/api/xxx', method: 'GET' name: '获取xxx' }) // 完整配置见下节
export interface RouteMetadataType<ExtType = any> {
/** 路由名称 */
name?: string;
/** 方法 */
method?: MethodType | MethodType[];
/** 路径 */
url?: string | RegExp | string[] | RegExp[] | ((app: Application) => string);
/** 路由描述,仅收集 */
description?: string;
/** 路由中间件 */
middleware?: MiddlewareType[];
/** 路由扩展信息,仅收集 */
extInfo?: ExtType;
/** 路由方法抛出异常时回调 */
onError?: (ctx: Context, error: Error) => void;
}
函数类型跟 egg 定义稍有不同:
(app: Application, typeInfo: RouteType) => (ctx: any, next: any) => any
在路由定义的中间件跟全局的中间件只在于范围,全局中间件更适合横切面的处理,用来统一处理特定业务功能接口就大材小用了,还需要设置过滤逻辑,甚至需要在 config 中设置黑白名单。而路由级中间件适合只有部分接口需要的统一处理,配合从 @route 上收集的类型信息处理更佳。
函数参数来源按顺序优先级从 param、query、body 获取,目前支持 Number 、 Date 、 Boolean 、 Object/any (自动尝试反序列化) 的格式化,支持 bracket 格式数组 query 传参。
插件还提供了 FromBody , FromParam , FromQuery , FromHeader 注解可限定参数的获取路径,并支持名称映射。
@route('/api/xxx/:id', { name: '获取xxx' })
async getXXX(
id: number,
@FromQuery('filter_type') // filter_type 映射
filterType: string,
) {
return this.xxxService.getXXX(id, filterType);
}
不再需要 this.ctx.body =
的形式,直接 return 需要返回的结果即可,当返回不为 undefined 将会赋值给 this.ctx.body
。其他 this.render
等不变。
使用 @route() decorator 形式,替换掉原有的路由定义文件,每个 Controller 需要是类形式
将路由方法内获取参数代码去除,在函数参数部分声明路由参数,直接 return 返回结果替代 this.ctx.body
赋值
支持模板生成,如果没有找到模板,会在SDK生成目录生成默认模板。
开发时
在配置中开启即可,根据需要自定义其他配置。
打包时
在 前端打包流程前 可以使用 egg-controller gensdk
命令生成前端sdk,需要注意,如果为TypeScript项目,需要先将TypeScript编译,然后执行生成命令。
在 egg-controller/error
下定义了一些基础异常类型,可直接使用,也可根据需求继承后使用。
BadRequestError
状态码400
ForbiddenError
状态码403
NotFoundError
状态码404
UnauthorizedError
状态码401
ServerError
状态码400(为了前端有错误message),realStatus 500
import { getRoutes } from 'egg-controller';
FAQs
controller for egg.
The npm package egg-controller receives a total of 88 weekly downloads. As such, egg-controller popularity was classified as not popular.
We found that egg-controller demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.