Skip to content

快速入门

🎯 像搭积木一样构建你的业务逻辑

💡 类型安全 + 函数式 = 优雅的中间件管道

嘿!👋 欢迎来到 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

下一步

现在你已经掌握了基础用法,接下来学习:

  1. 核心概念 - 深入理解洋葱模型
  2. Context 上下文 - 优雅地共享状态
  3. 异步处理 - Promise 不再可怕

这是一个第三方 Farrow 文档站 | 用 ❤️ 和 TypeScript 构建