@flexent/http-router

中文文档
2.22.1发布于 2026/11/13MITES Module零依赖近 30 天下载 2308

HTTP 服务器基于装饰器的路由

中文使用文档
文档目录3 节
  1. 要点
  2. 使用量
  3. 规则

@flexent/http-router (英语)

HTTP 服务器基于装饰器的路由.

要点

  • * 声明路线和参数定义
  • 方便链式成分
  • 基于 Schema 参数验证

使用量

定义路由处理器,用路由和参数装饰器来装饰同源函数.

export class UsersRouter {

    @dep() private userStorage!: UserStorage;

    @Get({ path: '/users' })
    async getUsers(
        @QueryParam('limit', { schema: { type: 'number', default: 10 } }) limit: number,
        @QueryParam('offset', { schema: { type: 'number', default: 0 } }) offset: number,
    ) {
        const users = await this.userStorage.listUsers(limit, offset);
        return {
            users,
        };
    }

    @Post({ path: '/users' })
    async createUser(
        @BodyParam('name', { schema: { type: 'string' } }) name: string,
        @BodyParam('email', { schema: { type: 'string', regex: /^[^\s@]+@[^\s@]+\.[^\s@]+$/ } }) email: string,
        @BodyParam('password', { schema: { type: 'string', minLength: 8 } }) password: string,
    ) {
        const user = await this.userStorage.createUser(name, email, password);
        return { user };
    }

}

连接网路。 大多数应用会使用单独的范围隔离请求范围状态.

约束 RouterHandler:它会解决在相同范围内所定义的所有路线.

export class HttpScope extends Mesh {

    constructor(parent: Mesh) {
        super('Http', parent);
        this.service(HttpRouteHandler);
        this.service(UsersRouter);
    }

}

在HttpServer中,即时将范围并授权请求处理给路由器汉德勒.

export class MainHttpServer extends HttpServer {

    @dep() private mesh!: Mesh;

    async handle(ctx: HttpContext, next: HttpNext) {
        const scope = new HttpScope(this.mesh);
        await scope.resolve(HttpRouteHandler).handle(ctx, next);
    }

}

HttpRouteHandler可以成为链条的一部分,在这种情况下,创建一个专门的处理器是有用的:

export class AppHandler extends HttpChain {

    @dep() private authHandler!: AuthHandler;
    @dep() private errorHandler!: ErrorHandler;
    @dep() private routeHandler!: HttpRouteHandler;

    handlers = [
        this.errorHandler,
        this.authHandler,
        this.routeHandler,
    ];
}

或者,每个路由器都可以从 HttpRouter。 。 。 .

export FooRouter extends HttpRouter {

    @Get({ path: '/foo' })
    async getFoo() {
        return {
            foo: 123,
        };
    }

}

这样路由器可以像往常一样被编成链子,对路由处理器的调用顺序有更微粒的控制.

export class AppHandler extends HttpChain {

    @dep() private authHandler!: AuthHandler;
    @dep() private errorHandler!: ErrorHandler;
    @dep() private fooRouter!: FooRouter;

    handlers = [
        this.errorHandler,
        this.authHandler,
        this.fooRouter,
    ];
}

注: HttpRouteHandler 通常效率更高,因为它可以跳过不符合请求的即时路由器(见下文).

规则

  • 路线有两种:

    1. 终点 定义为 @Get, (中文(简体) ), @Post, (中文(简体) ), @Put, (中文(简体) ), @Delete, (中文(简体) ), @Patch 作装饰.
    2. 中间软件 定义为 @Middleware 装饰师.
  • 每项请求a 单人 端点匹配 .

  • 如果端点匹配 :

    • 同类的中件被执行,顺序是定义.
    • next() 无法调用, 因此链条中的其他处理器会被跳过 .
  • 如果没有匹配的终点 :

    • 中间器件即使匹配,也不会被执行.
    • next() 以允许其他处理器执行.
    • 作为额外的优化,如果 RouteHandler ,它只会将路由器类与匹配的端点进行即时处理.

版本与发布记录

@flexent/http-router 共发布 40 个版本,首次发布于 2026/04/19;过去 12 个月发布了 40 个版本。

版本发布日期距今
2.22.1latest2026/11/132 天前
2.22.02026/11/132 天前
2.21.02026/11/132 天前
2.20.22026/11/133 天前
2.20.12026/11/115 天前
2.20.02026/11/069 天前

关于 @flexent/http-router 的常见问题

@flexent/http-router 是什么?

HTTP 服务器基于装饰器的路由

如何安装 @flexent/http-router?

在项目目录运行 npm install @flexent/http-router,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:airtight(^5.7.2)、mesh-ioc(^4.3.1)、mesh-config(^1.3.4)、reflect-utils(^1.1.3)、@flexent/errors(^2.22.1)、@flexent/logger(^2.22.1)、mesh-decorators(^1.3.6)、@flexent/metrics(^2.22.1)、reflect-metadata(^0.2.2)、@flexent/http-server(^2.22.1)、@flexent/pathmatcher(^2.22.1)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@flexent/http-router 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/flexent__http-router 是否存在。

@flexent/http-router 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@flexent/http-router 可以商用吗?

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

@flexent/http-router 的下载量有多少?

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

@flexent/http-router 还在维护吗?

最新版本 2.22.1 发布于 2026/11/13(2 天前);至今共发布 40 个版本,其中过去 12 个月发布了 40 个;首次发布于 2026/04/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。