# 路由注册与嵌套

URL: https://caijiao.org/fastify/routing/registration
Source: docs/fastify/routing/registration.md
Description: 介绍 Fastify 中的路由注册方式、路径参数和嵌套路由结构的组织方式。

[Fastify](/fastify/) 提供简洁灵活的路由定义方式，并支持模块化组织与嵌套注册，方便构建结构清晰的服务。

## 基本路由注册

Fastify 使用对应 HTTP 方法的函数进行路由注册，如 `.get()`、`.post()`、`.put()` 等：

```js
fastify.get('/ping', async () => {
  return { pong: true };
});
```

## 路径参数

通过冒号定义路径参数：

```js
fastify.get('/user/:id', async (request) => {
  const { id } = request.params;
  return { id };
});
```

支持多个参数和正则匹配：

```js
fastify.get('/order/:orderId(\\d+)', async (request) => {
  return { order: request.params.orderId };
});
```

## 嵌套路由与前缀

使用 `.register()` 方法可以组织嵌套路由，并设置路径前缀：

```js
// user-routes.js
async function userRoutes(fastify) {
  fastify.get('/', async () => {
    return [{ id: 1, name: 'Alice' }];
  });

  fastify.get('/:id', async (request) => {
    return { id: request.params.id };
  });
}

module.exports = userRoutes;
```

在主文件中注册模块并指定前缀：

```js
fastify.register(require('./user-routes'), { prefix: '/users' });
```

访问路径为：

- `/users/` → 用户列表
- `/users/:id` → 获取指定用户信息

## 方法约束与 schema

可为每个路由定义 method 和 schema，明确其行为：

```js
fastify.route({
  method: 'POST',
  url: '/submit',
  schema: {
    body: {
      type: 'object',
      required: ['name'],
      properties: {
        name: { type: 'string' }
      }
    }
  },
  handler: async (request) => {
    return { ok: true };
  }
});
```

合理组织路由结构，有助于维护大型应用的可读性与模块化。
