路由指南

欢迎使用 Finch 路由指南!本指南将引导您完成在 Finch 应用程序中配置路由的步骤。无论您是经验丰富的开发人员还是刚刚起步,Finch 都提供了一套强大的工具来简化服务器端 Web 应用程序开发。

FinchRoute

FinchRoute 类用于在 Finch 应用程序中定义路由。它包含定义路由所需的所有属性。以下是使用示例:

FinchRoute(
  path: '/',
  index: () async => rq.renderString(text: 'Hello World'),
);

属性:

  • path:路由的路径。可以包含形式为 {variableName} 的变量。例如,/users/{id}
  • index:匹配路由时要调用的函数。应返回 Future<String>
  • methods:路由应响应的 HTTP 方法。是一个 String 列表。例如,['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD', 'CONNECT', 'TRACE']
  • controller:用于路由的控制器。应该是 Controller 的实例。
  • children:当前路由的子路由。是一个 FinchRoute 列表。
  • extraPath:路由的附加路径。是一个 String 列表。例如,['/home', '/index']
  • apiDoc:生成路由 API 文档的函数。应返回 Future<ApiDoc>
  • auth:用于路由的身份验证控制器。应该是 AuthController 的实例。
  • permissions:路由所需的权限。是一个 String 列表。例如,['admin']
  • widget:为路由渲染的小部件。应该是表示小部件路径的 String
  • params:传递给小部件的默认参数。是一个 Map<String, Object?>
  • title:页面标题。是一个 String
  • excludePaths:要从路由中排除的路径。是一个 String 列表。
  • hosts:路由应响应的主机。是一个 String 列表。例如,['example.com', 'www.example.com']
  • ports:路由应响应的端口。是一个 int 列表。例如,[80, 443]

简单路由定义示例:

FinchRoute(
  key: 'route.users',
  path: '/users',
  index: () async => rq.renderJson(data: {'message': 'Users list'}),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // 或 ['*'] 表示所有主机
  ports: [80, 443], // 或 [] 表示所有端口
);

使用控制器的路由示例:

FinchRoute(
  key: 'route.users',
  path: '/users',
  controller: UserController(),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // 或 ['*'] 表示所有主机
  ports: [80, 443], // 或 [] 表示所有端口
);

具有子路由的路由示例:

FinchRoute(
  key: 'route.users',
  path: '/users',
  controller: UserController(),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // 或 ['*'] 表示所有主机
  ports: [80, 443], // 或 [] 表示所有端口
  children: [
    FinchRoute(
      key: 'route.users.show',
      path: '/{id}',
      index: () async => rq.renderJson(data: {'message': 'User details'}),
      methods: Methods.ONLY_GET,
    ),
  ],
);

具有身份验证和权限的路由示例:

FinchRoute(
  key: 'route.users',
  path: '/users',
  controller: UserController(),
  methods: Methods.ONLY_GET,
  hosts: ['example.com'], // 或 ['*'] 表示所有主机
  ports: [80, 443], // 或 [] 表示所有端口
  auth: AppAuthController(),
  permissions: ['admin'],
);

AppAuthController 是一个扩展 AuthController 的类。您可以在 example 目录中找到它的示例。

API 路由

Finch 提供了一种方便的方式来定义 API 路由。您可以使用 FinchApp/api 路径来定义 API 路由。以下是使用示例:

app.get(
  path: '/api/users',
  controller: UserController(),
);

参数路由

要在路径中定义参数,可以使用 {} 语法。例如,/users/{id}。您可以在 index 函数中使用 rq.get 方法访问参数。例如,rq.getParam('id')