@decorators/express

中文文档
3.0.0发布于 2023/07/28MITTypeScriptCommonJS零依赖近 30 天下载 6657

节点装饰器 - 特快库的装饰器

中文使用文档
文档目录3 节
  1. 安装
  2. API 密码
  3. 示例快取应用程序和控制器:

Node Decorators

项目为节点JS的现代工具执行装饰器,例如:

安装

npm install @decorators/express --save

API 密码

职能

  • 附加控制器( app: express. application. QQ Express. Router, 控制器: 控制器[]) - 附加控制器以表达应用程序
  • 附录 CaptainInstances(应用程序:Express.Application QQ Express. Router,控制器: Captain []) 控制器: - 附加已存在的控制器实例

装饰者

类
  • @ captain( baseUrl: 字符串, 中间软件? ), (中文(简体) ), @ captain( baseUrl: 字符串, 路由器) 选项: 路由器选项, 中间软件 - 基础url的注册控制器
方法
  • @ all( url: 字符串, 中间软件? ) - 登记所有路线
  • @ Get( URL: 字符串, 中间软件? ) - 登记有路
  • @ Post( URL: 字符串, 中间软件 ? : 中间软件 ) - 登记邮站路线
  • @ Put( url: 字符串, 中间软件? ) - 登记器设置路线
  • @ Delete( URL: 字符串, 中间软件? ) - 登记册删除路线
  • @ Patch( URL: 字符串, 中间软件? ) - 注册补丁路线
  • @ options( URL: 字符串, 中间软件? : 中间软件[ ]) - 登记选项路由
  • @ head( url: 字符串, 中间软件? ) - 登记头路
  • @ status( 代码: 号码) - 指定路由的状态代码

中间软件是执行的类 Middleware 接口.

要使用类, 导入 Middleware 接口和执行,例如:

import { Middleware } from '@decorators/express';

class UserMiddleware implements Middleware {
  public use(request: Request, response: Response, next: NextFunction): void {
    next();
  }
}

或简单的函数

function userMiddleware(request: Request, response: Response, next: NextFunction): void {
  next();
}
参数
  • @ request( 财产? : 字符串) (别名) @ Req( 财产? : 字符串)) - 如果指定名称,返回快取对象或任何其他对象
  • @ response( ) (别名) @ Res (英语)) - 返回快递重置对象
  • @ next( ) - 返回表达下一个函数
  • @ Params( param? : 字符串) - 如果指定了参数名称,则快报req.params对象或单参数
  • Query( param? ): 字符串) - 如果指定查询参数名称,则快取req.query对象或单查询参数
  • @ body( param? : string) - 如果指定了身体参数名称,则表示直径物体或单体参数
  • @ headers( 财产? : 字符串) - 如果指定了标题参数名称,则快取正题或单取正题
  • @ Cookies( param? : 字符串) - 如果指定了 cookie 参数名称, 则快递 req.body 对象或单个 cookie 参数

中间软件出错

要添加错误中间软件, 处理未处理错误只需执行 ErrorMiddleware 界面并使用 ERROR_MIDDLEWARE 标志,比如:

import { Container, ErrorMiddleware, ERROR_MIDDLEWARE } from '@decorators/express';

@Injectable()
class ServerErrorMiddleware implements ErrorMiddleware {
  public use(error: Error, request: Request, response: Response, next: NextFunction) {
    next();
  }
}

Container.provide([
  { provide: ERROR_MIDDLEWARE, useClass: ServerErrorMiddleware }
]);

或作为函数

import { Container, ERROR_MIDDLEWARE } from '@decorators/express';

function serverErrorMiddleware(error: Error, request: Request, response: Response, next: NextFunction) {
  next();
}

Container.provide([
  { provide: ERROR_MIDDLEWARE, useValue: serverErrorMiddleware }
]);

依赖性注射

本单元支持由下列人员提供的依赖性注射: @decorators/di 模块。 例如,见下文的全部例子.

示例快取应用程序和控制器:

import {
  Response, Params, Controller, Get,
  attachControllers, Middleware
} from '@decorators/express';

@Controller('/')
class UsersController {

  constructor(private userService: UserService) {}

  @Get('/users/:id')
  getData(@Response() res, @Params('id') id: string) {
    res.send(this.userService.findById(id));
  }
}

let app = express();
attachControllers(app, [UsersController]);

app.listen(3000);

也可以附加控制器来表示. 路由器实例。 如果您想要将所有路由命名为前缀时, 这样做是有用的 :

import { attachControllers } from '@decorators/express';

const apiRouter = express.Router();
attachControllers(apiRouter, [UsersController]);

app.use('/v1/api', apiRouter);

您也可以使用自定义的装饰器作为中间软件 :

自定义装饰

import { attachMiddleware } from "@decorators/express";
import {Request,Response,NextFunction} from '@decorators/express/node_modules/express';

export function Access(key: string) {
    return function (target: any,propertyKey: string,descriptor: PropertyDescriptor) {
      attachMiddleware(target,propertyKey,(req : Request,res : Response,next : NextFunction)=>{
            if(["CAN_ACCESS_TEST","CAN_ACCESS_HOME"].includes(key)){
              next();
            }else{
              res.send("ACCESS DENIED");
            }
        })
    };
  }

控制器代码

@Controller("/")
export class MainController {

    @Access("CAN_ACCESS_TEST")
    @Get("/test")
    getB() {
        return "You can access the test";
    }

    @Access("CAN_ACCESS_HOME")
    @Get("/home")
    getB() {
        return "You can access the home";
    }
}

说明:- Please use custom decorators before express decorators otherwise system will not detect any controller metadata and your decorator will not invoked.

将工作:

    @Access("CAN_ACCESS_TEST")
    @Get("/test")
    getB() {
        return "You can access the test";
    }

将不工作:

    @Get("/test")
    @Access("CAN_ACCESS_TEST")
    getB() {
        return "You can access the test";
    }

版本与发布记录

@decorators/express 共发布 24 个版本,首次发布于 2016/09/27;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.0.0latest2023/07/283 年前
2.9.42023/06/283 年前
2.9.32023/04/043 年前
2.9.12023/02/043 年前
2.9.02023/01/303 年前
2.8.12023/01/303 年前

关于 @decorators/express 的常见问题

@decorators/express 是什么?

节点装饰器 - 特快库的装饰器

如何安装 @decorators/express?

在项目目录运行 npm install @decorators/express,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@decorators/di(^3.0.0)、express(^4.16.3)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@decorators/express 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@decorators/express 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@decorators/express 可以商用吗?

@decorators/express 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@decorators/express 的下载量有多少?

根据 npm 官方下载统计,@decorators/express 在 2026/10/12 – 2026/11/10 这 30 天内被下载 6,657 次,日均约 222 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@decorators/express 还在维护吗?

最新版本 3.0.0 发布于 2023/07/28(3 年前);至今共发布 24 个版本,其中过去 12 个月发布了 0 个;首次发布于 2016/09/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。