快速入门
🎯 像搭积木一样构建你的业务逻辑
💡 类型安全 + 函数式 = 优雅的中间件管道
嘿!👋 欢迎来到 farrow-pipeline 的世界。如果你曾经:
- 🤯 被回调地狱折磨得生不如死
- 😵 在异步代码中迷失了
this - 😤 因为中间件顺序错乱而调试到深夜
- 🥲 写出了一堆难以测试的意大利面代码
那么,恭喜你找对地方了!farrow-pipeline 就是来拯救你的。
🚀 安装
像安装任何 npm 包一样简单:
bash
npm install farrow-pipeline
# 或者用你喜欢的包管理器
pnpm add farrow-pipeline
yarn add farrow-pipeline⚠️ 注意:farrow-pipeline 只能在 Node.js 环境中运行(依赖 AsyncLocalStorage),浏览器环境请绕道。
🎨 人生第一个 Pipeline
想象你正在做数学题:给一个数字加倍,然后格式化输出。用传统方式写起来很无聊,但用 Pipeline 就像搭积木一样有趣:
typescript
import { createPipeline } from 'farrow-pipeline'
// 创建一个数值处理管道(输入 number,输出 string)
const pipeline = createPipeline<number, string>()
// 第一个积木:给数字加倍
pipeline.use((input, next) => {
console.log('收到数字:', input)
return next(input * 2) // 传给下一个积木
})
// 第二个积木:格式化输出
pipeline.use((input) => {
return `结果: ${input}`
})
// 🎉 运行!
const result = pipeline.run(5)
console.log(result) // "结果: 10"就是这样! 你刚刚创建了你的第一个 Pipeline。是不是感觉还挺简单?😎
基础用法
创建 Pipeline
超级简单,指定输入输出类型就行:
typescript
// 最简单的方式
const pipeline = createPipeline<输入类型, 输出类型>()
// 例子:接收字符串,返回数字
const parser = createPipeline<string, number>()添加中间件
方式一:逐个添加
typescript
pipeline.use((input, next) => {
// 做点啥
return next(input)
})
pipeline.use((input, next) => {
// 再做点啥
return next(input)
})方式二:批量添加
typescript
pipeline.use(
middleware1,
middleware2,
middleware3
)方式三:链式调用(最优雅)
typescript
createPipeline<number, string>()
.use((x, next) => next(x + 1))
.use((x, next) => next(x * 2))
.use((x) => `结果: ${x}`)💡 小技巧:链式调用看起来像流水线,非常直观!
运行 Pipeline
typescript
// 基础运行
const result = pipeline.run(输入)
// 带默认处理
const result = pipeline.run(输入, {
onLast: (input) => `如果所有中间件都调用了 next,就执行我`
})快速示例集
示例 1: 数据转换管道
typescript
const dataProcessor = createPipeline<string, number>()
.use((input, next) => {
// 去除空格
return next(input.trim())
})
.use((input, next) => {
// 转为数字
const num = parseInt(input, 10)
return next(num)
})
.use((input) => {
// 加倍
return input * 2
})
console.log(dataProcessor.run(' 42 ')) // 84示例 2: 验证管道
typescript
const validator = createPipeline<any, string>()
.use((input, next) => {
if (typeof input !== 'object') {
return '输入必须是对象'
}
return next(input)
})
.use((input, next) => {
if (!input.name) {
return '缺少 name 字段'
}
return next(input)
})
.use((input) => {
return '验证通过'
})
console.log(validator.run({ name: 'Alice' })) // "验证通过"
console.log(validator.run('invalid')) // "输入必须是对象"示例 3: 日志管道
typescript
const logger = createPipeline<string, string>()
.use((input, next) => {
console.log('📥 输入:', input)
const result = next(input.toUpperCase())
console.log('📤 输出:', result)
return result
})
.use((input) => {
return `[处理完成] ${input}`
})
logger.run('hello')
// 📥 输入: hello
// 📤 输出: [处理完成] HELLO下一步
现在你已经掌握了基础用法,接下来学习:
- 核心概念 - 深入理解洋葱模型
- Context 上下文 - 优雅地共享状态
- 异步处理 - Promise 不再可怕
