# @decorators/express 中文文档

规范地址：https://npmcn.com/package/%40decorators/express/

版本：3\.0\.0
npm 元数据更新时间：2023-07-28T15:29:36.039Z
中文译文更新时间：2026-11-11T19:32:21.483Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40decorators/express
原文对照：https://npmcn.com/package/%40decorators/express/?lang=original
项目主页：https://github.com/serhiisol/node-decorators#readme
源码仓库：https://github.com/serhiisol/node-decorators

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：75.6 kB，27 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：@decorators/di ^3\.0\.0，express ^4\.16\.3
- 首次发布：2016-09-27T10:46:25.825Z
- 最新版本发布：2023-07-28T15:29:35.932Z
- 近 30 天下载量：6657（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：24（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install @decorators/express
```

也可以使用：`pnpm add @decorators/express`、`yarn add @decorators/express`、`bun add @decorators/express`

## README

![Node Decorators](https://github.com/serhiisol/node-decorators/blob/master/decorators.png?raw=true)

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

-   [运通JS](http://expressjs.com/)

### 安装

```
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` 接口和执行,例如:

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

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

或简单的函数

```typescript
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` 标志,比如:

```typescript
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 }
]);
```

或作为函数

```typescript
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` 模块。 例如,见下文的全部例子.

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

```typescript
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);
```

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

自定义装饰

```typescript
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");
            }
        })
    };
  }

```

控制器代码

```typescript
@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.`

将工作:

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

将不工作:

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

## 常见问题

### @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 和提交记录判断。

