New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@zenweb/controller

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@zenweb/controller

Zenweb Controller module

latest
npmnpm
Version
6.3.0
Version published
Maintainers
1
Created
Source

zenweb 控制器与路由

演示

简单使用

在 src/controller 目录下新建一个文件 simple.ts

import { Context, Get, Post } from 'zenweb';

export class Controller {
  @Get()
  index(ctx: Context) { // 如果函数名称为 index 则路径名称为 /,否则路径名称默认为函数名称
    return 'Hello zenweb';
  }

  @Get() // 不指定 path 参数则默认使用函数名称 /path2
  path2(ctx: Context) {
    return 'Hello path2';
  }

  @Get('/p3') // 指定 path 值为 /p3
  path3(ctx: Context) {
    return 'Hello path3';
  }

  @Post() // POST 请求方法
  post(ctx: Context) {
    return 'Hello post';
  }
}

:::tip 注意 控制器方法中 return 数据如果需要统一处理需要安装 @zenweb/result@^3.5.0 模块,否则 return 数据会被设置到 ctx.body 上 :::

使用中间件

import { Context, Next, Get, Controller } from 'zenweb';

// 定义一个中间件处理函数
function actionLog(ctx: Context, next: Next) {
  console.log('actionLog middleware')
  return next();
}

export class Controller {
  // 方法上的中间件
  @Get(actionLog)
  simple() {
    return 'simple';
  }
}

// 控制器中间件,作用与所有控制器方法上
@Controller({
  middleware: actionLog,
})
export class Controller2 {
  @Get()
  simple() {
    return 'simple';
  }
}

自动路径映射规则

如果开启 autoControllerPrefix 功能,则会自动为控制器方法添加路径前缀,等同于自动给控制器类添加 @Controller({ prefix }) 选项

文件名规则

控制器扫描目录为 src/controller 下的文件结构

文件名映射路径说明
index.ts/index 名称为特殊名称,代表首页,所以默认为根路径 /
user.ts/user非 index 文件名都会被映射为路径名
user/index.ts/user同理即使是子目录下面的 index 文件名会当成子目录的根路径处理
user/profile.ts/user/profile子目录下面的文件名会当成子目录的子路径处理

prefix 的处理规则

映射路径会自动修改控制器的 prefix 配置项,但是有如下几种特殊的处理规则:

  • prefix 值没有设置时直接使用自动路径值
  • 已经设置的 prefix 值如果开头为 /(例如: prefix: '/admin')则不做任何处理(忽略)
  • 已经设置的 prefix 值没有使用 / 开头(例如: prefix: 'admin'),则会在原来已经设置的结果前添加自动路径值。例如自动路径为 /manage/some 控制器值 prefix: 'admin' 则会变为 prefix: '/manage/some/admin'

控制器内方法映射规则

即使没有开启 autoControllerPrefix 功能也不会影响控制器内方法的映射规则

class SomeController {
  @Get() // 默认映射路径为 /
  index() {}

  @Get() // 默认映射路径为 /detail
  detail() {}

  @Get() // 默认映射路径为 /detail_by_id
  detail_by_id() {}

  @Get() // 默认映射路径为 /detail/:id
  'detail/:id'(ctx: Context) { return ctx.params.id }
}

使用技巧

统一管理后台接口

例如后台管理接口中需要统一添加 /admin 作为前缀,并且需要验证管理员身份,则可以这样使用

import { Mapping, Middleware, RouterMethod, RouterPath } from 'zenweb';

/**
 * 管理员验证中间件
 */
export function adminRequired(): Middleware {
  return function (ctx, next) {
    if (!ctx.admin) {
      fail('没有权限');
    }
    return next();
  }
}
s
/**
 * 管理后台路径统一映射
 */
export function AdminMapping(method?: RouterMethod, path?: RouterPath, ...middleware: Middleware[]) {
  return Mapping({
    method,
    prefix: '/admin',
    path,
    middleware: [adminRequired(), ...middleware],
  });
}
import { Context, Next, Mapping, Controller } from 'zenweb';
import { AdminMapping } from './_helper';

export class IndexController {
  // 等同于 @Mapping({ path: '/admin/', method: 'GET', middleware: [adminRequired()] })
  @AdminMapping()
  index() {
    return 'admin index';
  }

  // 等同于 @Mapping({ path: '/admin/create_user', method: 'POST', middleware: [adminRequired()] })
  @AdminMapping('POST')
  create_user() {
    return 'create user';
  }
}

Keywords

web

FAQs

Package last updated on 10 Apr 2026

Did you know?

Socket

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.

Install

Related posts