ByteNoteByteNote

字节笔记本

2026年5月3日

TanStack Start - Server Routes 服务端路由

API中转
¥120

服务端路由是 TanStack Start 的强大功能,允许你在应用中创建服务端端点,适用于处理原始 HTTP 请求、表单提交、用户认证和 API 端点。

简单示例

ts
// routes/hello.ts
export const Route = createFileRoute('/hello')({
  server: {
    handlers: {
      GET: async ({ request }) => {
        return new Response('Hello, World!')
      },
    },
  },
})

同文件双用途

服务端路由可以与应用路由在同一文件中定义:

tsx
// routes/hello.tsx
export const Route = createFileRoute('/hello')({
  server: {
    handlers: {
      POST: async ({ request }) => {
        const body = await request.json()
        return new Response(JSON.stringify({ message: `Hello, ${body.name}!` }))
      },
    },
  },
  component: HelloComponent,
})

文件路由约定

文件API 路由
routes/users.ts/users
routes/users/$id.ts/users/:id
routes/users/$id/posts.ts/users/:id/posts
routes/api/file/$.ts/api/file/*

中间件支持

为特定处理程序添加中间件

tsx
export const Route = createFileRoute('/hello')({
  server: {
    handlers: ({ createHandlers }) =>
      createHandlers({
        GET: {
          middleware: [loggerMiddleware],
          handler: async ({ request }) => {
            return new Response('Hello, World!')
          },
        },
      }),
  },
})

为所有处理程序添加中间件

tsx
export const Route = createFileRoute('/hello')({
  server: {
    middleware: [authMiddleware, loggerMiddleware],
    handlers: {
      GET: async ({ request }) => { return new Response('Hello!') },
      POST: async ({ request }) => { return new Response('Created') },
    },
  },
})

处理程序上下文

属性类型描述
requestRequest传入的请求对象
params对象路由的动态路径参数
context对象请求上下文,用于在中间件间传递数据

动态路径参数

ts
// routes/users/$id.ts
export const Route = createFileRoute('/users/$id')({
  server: {
    handlers: {
      GET: async ({ params }) => {
        const { id } = params
        return new Response(`User ID: ${id}`)
      },
    },
  },
})

处理请求体

方法用途
request.json()JSON 数据
request.text()纯文本
request.formData()表单数据

实际应用示例

RESTful API

ts
// routes/api/users/$id.ts
export const Route = createFileRoute('/api/users/$id')({
  server: {
    middleware: [authMiddleware],
    handlers: {
      GET: async ({ params }) => {
        const user = await db.users.findById(params.id)
        if (!user) return new Response('Not found', { status: 404 })
        return Response.json(user)
      },
      PUT: async ({ params, request }) => {
        const body = await request.json()
        const user = await db.users.update(params.id, body)
        return Response.json(user)
      },
      DELETE: async ({ params }) => {
        await db.users.delete(params.id)
        return new Response(null, { status: 204 })
      },
    },
  },
})

表单处理

ts
export const Route = createFileRoute('/contact')({
  server: {
    handlers: {
      POST: async ({ request }) => {
        const formData = await request.formData()
        const name = formData.get('name')
        const email = formData.get('email')
        await sendEmail({ name, email })
        return Response.json({ success: true })
      },
    },
  },
  component: ContactForm,
})

API 速查

API用途
server.handlers定义 HTTP 方法处理程序
server.middleware路由级中间件
createHandlers()创建带中间件的处理程序
params访问路径参数
context访问中间件上下文
request原始请求对象
分享: