Server Functions

Server Functions 是 TanStack Start 的服务端 RPC。它们在服务端执行,但可从 loader、组件事件、hook 或其他 Server Function 调用。

基本写法

import { createServerFn } from '@tanstack/react-start'

export const getTodos = createServerFn({ method: 'GET' }).handler(async () => {
  return db.todo.findMany()
})

从 loader 调用:

export const Route = createFileRoute('/todos')({
  loader: async () => getTodos(),
})

输入验证

const createTodo = createServerFn({ method: 'POST' })
  .validator((input: { title: string }) => {
    if (!input.title.trim()) throw new Error('Title required')
    return { title: input.title.trim() }
  })
  .handler(async ({ data }) => {
    return db.todo.create({ data })
  })

生产中建议使用 Zod 或 Valibot,避免信任客户端输入。

GET vs POST

方法场景
GET读取、无副作用、可缓存
POST创建、更新、删除、有副作用

不要把 mutation 伪装成 GET,否则可能被预取、缓存或爬虫误触发。

安全边界

Server Functions 是同源 RPC。公开 API 或跨域 webhook 应使用 Server Routes

基本原则:认证、授权、验证输入、不返回密钥或内部错误栈、写操作启用 CSRF / Origin 检查。

下一步