Effect 的 HTTP 路由怎么接到 Cloudflare Workers?
HttpRouter.toWebHandler 产出 Request 到 Promise<Response> 的函数,正好对上 Workers 的 fetch 入口。重点是把 env bindings 先包成 service,并在模块作用域构建一次。
哈喽,我是颜sir,询盘自由网背后的人。做网络营销快6年,运气不错,实现了财务自由,目前全职在家钻研更多赚钱方法。在钻研过程中,我发现网上几乎找不到优质的中文资源。我深知新手入门需经历痛苦挣扎,所以创建了询盘自由网,把我知道的分享给你。
HttpRouter.toWebHandler 产出 Request 到 Promise<Response> 的函数,正好对上 Workers 的 fetch 入口。重点是把 env bindings 先包成 service,并在模块作用域构建一次。
嵌套的 Effect.provide 会复用外层已构建的 Layer,兄弟 provide 却各自构建。用一个计数器 Layer 数出组合、嵌套、兄弟三种形态各构建几次。
Layer.fresh 把「不共享」写在 Layer 值上,Effect.provide 的 local 选项把它写在调用点上。用带子依赖的 Layer 数出两者各隔离了哪些构建。
嵌套的 Effect.provide 会自动复用 Layer,但兄弟 provide 不会。讲清为什么仍要先组合依赖图、入口只 provide 一次,以及怎么用计数器 Layer 写回归测试。
Effect 4.0.5 里有五个名字相近的资源 API。按「有没有 key、要不要共享、会不会过期」三个问题,几句话就能选对,同时标明哪几个是 unstable。
Pool 把同类资源(数据库连接、worker)攒成一批复用并限制并发。这篇讲 make 与 makeWithTTL 的区别、借用方式,以及 invalidate 的严格相等陷阱。
token、远程配置这类会过期的单个资源,Effect 用 Resource 缓存一个 Effect 的结果,用 LayerRef 缓存整个 Layer 的 Context。这篇讲两者的刷新方式和选择。
LayerMap 把「key 到资源」换成「key 到 Layer」,业务代码只写 yield* TenantDb,租户在边界处选择。这篇讲它的写法、缓存行为,以及不设 idleTimeToLive 时每次都重建的坑。
两者都把一个 Layer 的输出喂给另一个,区别只在输出里留不留被喂入的服务。这篇用同一组 Layer 对比两种写法的类型。
在 Layer 构造体里用 Effect.addFinalizer 登记清理动作,Layer 被释放时执行,并保证反序释放、失败时回收。这篇讲清登记位置、顺序与长期运行的写法。
span 有成本,而大部分流量没有排查价值。这篇讲四个工具:整段关掉 span、用最低级别不导出细粒度 span、排除健康检查请求、循环里一批只开一个 span。
上报器收到的是 Cause,不是「该告警的事故」。这篇讲出错和出事的区别,以及上报器的回调该守住的四条边界:指纹、投递隔离、脱敏、供应商隔离。
用 Metric.counter、Metric.gauge、Metric.histogram 定义指标,用 Metric.update 更新。讲清三种形态各记什么,以及标签基数为什么要控制。
用 effect/observability 里的 OtlpTracer 和 OtlpLogger 组成一个 Layer,提供序列化和 HTTP 客户端两个依赖,合并进主 Layer 即可导出。
用 Effect.withSpan 包一段 Effect,或用 Effect.fn 定义自带 span 的函数。讲清 span 名字为什么要稳定、变化的值放哪、span 该打在哪些边界上。
用 Effect v4 的 Optic 模块替代层层展开运算符:Iso、Lens、Prism、Traversal 的层级,读、写、改、批量改的写法,以及什么时候不该用它。
不会。check 只在读侧过滤,写回时原样透传。这篇讲怎么用写后复核、makeOptional 自定义 setter 或 Schema.toIso 真正拦住非法写入。
Effect v4 把属性测试做成了原生能力:从 Schema 派生生成器,再用 it.prop 或 it.effect.prop 接进 vitest。这篇讲最短的上手路径。
Effect v4 的 Arbitrary.checkEffect 失败时给出 shrink 后的输入和 replay token。这篇讲 seed、replay、结构化 shrinking 与自定义 shrink 怎么用。
在 effect 4.0.5 上,对 Schema.Struct 调 TestSchema 的 verifyRoundTrip 会失败,即使 Schema 完全正常。这篇讲两个原因,以及用 checkEffect 加 toEquivalence 的绕法。