跳到主要内容

远程函数

远程函数

函数是带类型的服务器入口——应用向服务器请求实时查询或变更无法表达之物的方式。它们以 src/functions/+<lower_snake_case>.ts 编写;文件名就是规范的函数 ID,并成为生成的 client.invoke 属性。不存在注册模块。

定义

import { defineQueryHandler } from '@norbital-ai/bolt/authoring';
import { Effect, Schema } from 'effect';

export default defineQueryHandler({
  description: 'Counts the visits recorded against one site.',
  schema: Schema.Struct({ site_id: Schema.String }),
  handler: ({ site_id }, api) =>
    Effect.gen(function* () {
      return yield* api.db.site_visits.count({
        where: { site_id: { eq: site_id } }
      });
    })
});

把这份查询保存为 src/functions/+visit_count.ts ,然后从应用通过生成的客户端边界调用它:

import { client } from '$bolt/client';

const count = client.invoke.visit_count({ site_id: selectedSite });

查询与命令

  • defineQueryHandler ——响应式的只读服务器计算
  • defineCommandHandler ——可能变更数据的命令式工作

变更不变量优先使用集合的写入契约,定时或事件驱动的后台工作优先使用自动化。函数用于带类型化请求/响应约定的服务器计算。

谁可以调用

已登录会话或宿主系统签名可以调用 invoke.<name>。调度不要求单独的 invoke:<name> 策略授予。处理器仍以调用方身份运行,因此函数内部的每一项集合、文件与审批检查都是调用方的策略。