Bun-Crane 框架使用指南

Bun-Crane 框架使用指南

框架概述

Bun-Crane 是一个为 Bun 运行时设计的轻量级 Web 框架,提供了简洁而强大的 API 来构建高性能的 Web 应用程序。它结合了现代框架的优雅设计与 Bun 运行时的卓越性能,支持路由、中间件、WebSocket 等核心 Web 功能。

源码下载
https://cnb.cool/hebian/bun-crane

主要特点:

  • 轻量级设计,最小化依赖
  • 支持基于文件系统的路由(类似 Next.js 风格)
  • 灵活的中间件系统
  • 完整的 HTTP 方法支持
  • 内置 WebSocket 功能
  • TypeScript 原生支持
  • 高性能路由匹配

环境配置要求

在使用 Bun-Crane 之前,请确保您的环境满足以下要求:

  • Bun 运行时:需要安装最新版本的 Bun
  • TypeScript:版本 5.0 或更高(作为 peerDependency)

安装步骤

1. 安装 Bun(如果尚未安装)

# 使用官方安装脚本
curl -fsSL https://bun.sh/install | bash

2. 在项目中安装 Bun-Crane

# 使用 bun 安装
bun add bun-crane

# 安装 TypeScript(如果尚未安装)
bun add -D typescript

基本使用方法

创建简单的应用

以下是一个基本的 Bun-Crane 应用示例:

// index.ts
import { App } from 'bun-crane'

// 创建应用实例
const app = new App()

// 加载页面路由(可选)
await app.page('./pages')

// 添加中间件
app.use('/', (ctx) => {
    console.log('Request received:', ctx.req.url)
    return ctx.next()
})
// 定义 GET 路由
app.get('/', (ctx) => {
    return new Response('Hello, Bun-Crane!')
})

// 启动服务器
app.listen({
    port: 3000,
    hostname: 'localhost'
})

运行应用:

bun run --watch index.ts

核心功能说明

1. 路由系统

Bun-Crane 支持两种路由定义方式:

基于文件系统的路由

创建 pages 目录,并在其中添加路由文件:

// pages/index.ts
import { defineHandler } from 'bun-crane'

export default defineHandler((context) => {
    return new Response('Hello, World!')
})
手动路由注册
// 使用 HTTP 方法快捷函数
app.get('/api/users', (context) => {
    return Response.json([{ id: 1, name: 'User 1' }])
})

app.post('/api/users', (context) => {
    // 处理 POST 请求
    return new Response('User created', { status: 201 })
})

// 为所有 HTTP 方法注册同一处理器
app.all('/health', (context) => {
    return new Response('OK')
})

2. 中间件系统

中间件可以用于请求预处理、日志记录、认证授权等:

全局中间件
// 应用于所有路由
app.use((context) => {
    console.log('Global middleware')
    return context.next()
})
路径特定中间件
// 仅应用于 /api 开头的路由
app.use('/api', (context) => {
    console.log('API middleware')
    return context.next()
})
在路由文件中定义中间件
// pages/_middleware.ts
import { defineMiddleware } from 'bun-crane'

export const auth = defineMiddleware(async (context) => {
    // 认证逻辑
    return context.next()
})

export const logger = defineMiddleware((context) => {
    // 日志记录逻辑
    return context.next()
})

3. WebSocket 支持

Bun-Crane 提供了内置的 WebSocket 支持:

// 在应用中配置 WebSocket
app.ws('/ws', {
    open: (ws) => {
        console.log('WebSocket connection opened')
        ws.send('Welcome!')
    },
    message: (ws, message) => {
        console.log('Received message:', message)
        ws.send(`Echo: ${message}`)
    },
    close: (ws) => {
        console.log('WebSocket connection closed')
    }
})

或者在路由文件中定义:

// pages/_websocket.ts
import { defineWebSocketHandler } from 'bun-crane'

export default defineWebSocketHandler({
    open: (ws) => {
        console.log('WebSocket connection opened')
    },
    message: (ws, message) => {
        ws.send(`Received: ${message}`)
    }
})

4. 请求处理

方法处理器

可以为不同的 HTTP 方法定义不同的处理器:

// pages/users.ts
import { defineMethodHandler } from 'bun-crane'

export default defineMethodHandler({
    GET: (context) => {
        return Response.json([{ id: 1, name: 'User 1' }])
    },
    POST: (context) => {
        return new Response('Created', { status: 201 })
    }
})
命名导出处理器

也可以使用命名导出定义特定方法的处理器:

// pages/products.ts
import { EventContext } from 'bun-crane'

export const onRequestGet = async (context: EventContext) => {
    return Response.json([{ id: 1, name: 'Product 1' }])
}

export const onRequestPost = async (context: EventContext) => {
    return new Response('Product created', { status: 201 })
}

5. 动态路由

支持类似 Next.js 的动态路由参数:

// pages/users/[id].ts
import { defineHandler } from 'bun-crane'

export default defineHandler((context) => {
    // 访问动态路由参数
    const { id } = context.params
    return Response.json({ id, message: `User ${id}` })
})

常见操作示例

1. 创建 RESTful API

// pages/api/users/[id].ts
import { defineMethodHandler } from 'bun-crane'

export default defineMethodHandler({
    GET: (context) => {
        const { id } = context.params
        return Response.json({ id, name: `User ${id}` })
    },
    PUT: async (context) => {
        const { id } = context.params
        const body = await context.req.json()
        return Response.json({ id, ...body })
    },
    DELETE: (context) => {
        const { id } = context.params
        return new Response(`User ${id} deleted`, { status: 200 })
    }
})

2. 使用中间件进行认证

// auth.ts
import { defineMiddleware } from 'bun-crane'

export const authMiddleware = defineMiddleware((context) => {
    const authHeader = context.req.headers.get('Authorization')
    
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
        return new Response('Unauthorized', { status: 401 })
    }
    
    const token = authHeader.split(' ')[1]
    // 验证 token
    if (!isValidToken(token)) {
        return new Response('Invalid token', { status: 403 })
    }
    
    // 将用户信息添加到上下文状态
    context.state.user = { id: 1, name: 'Authenticated User' }
    
    return context.next()
})

// 在应用中使用
app.use('/api/protected', authMiddleware)

3. 静态文件服务

// 使用 Bun 的静态文件服务能力
app.get('/static/*', (context) => {
    const path = context.req.url.split('/static/')[1]
    const file = Bun.file(`./public/${path}`)
    return new Response(file)
})

参数配置说明

App.listen() 配置选项

app.listen({
    // 端口,默认为 3000
    port: 3000,
    // 主机名,默认为 '0.0.0.0'
    hostname: 'localhost',
    // TLS 选项
    tls: {
        key: Bun.file('./key.pem'),
        cert: Bun.file('./cert.pem')
    }
})

EventContext 对象

处理函数接收的上下文对象包含以下属性:

  • req: 请求对象,包含请求信息
  • params: 路由参数
  • state: 可用于中间件间传递数据的状态对象
  • cookies: Cookie 映射
  • env: 环境变量
  • next(): 调用下一个中间件或处理函数

故障排除指南

1. 路由未找到

  • 检查文件路径是否正确
  • 确认路由文件已正确导出处理函数
  • 对于动态路由,确保参数格式正确

2. 中间件不执行

  • 检查中间件注册顺序
  • 确保中间件调用了 context.next()
  • 验证路径匹配是否正确

3. WebSocket 连接失败

  • 确认 WebSocket 路径配置正确
  • 检查服务器是否支持 WebSocket
  • 验证客户端连接 URL 是否正确

4. TypeScript 类型错误

  • 确保安装了正确版本的 TypeScript
  • 检查类型导入是否正确
  • 使用 defineHandlerdefineMiddleware 等辅助函数确保类型安全

注意事项

  1. 性能优化:Bun-Crane 设计注重性能,但仍应注意避免在中间件中执行昂贵的操作

  2. 错误处理:建议添加全局错误处理中间件捕获未处理的异常

  3. 开发模式:使用 bun --watch 启用热重载以提高开发效率

  4. 版本兼容性:由于框架仍在快速发展,请确保使用与您的项目兼容的版本

  5. 生产环境:在生产环境中部署前,建议进行充分的测试和性能优化

结语

Bun-Crane 提供了构建现代 Web 应用所需的核心功能,同时保持了轻量级和高性能的特点。无论是构建简单的 API 服务还是复杂的 Web 应用,Bun-Crane 都是一个值得考虑的选择。

<think>好的,我需要帮助用户解决如何编译和安装已下载的bun-main的问题。根据用户提供的引用,特别是引用[1]中的Bun项目教程,里面提到了使用C++编译器和CMake的步骤。首先,我应该确认用户已经安装了必要的依赖,比如C++编译器和CMake,这可能包括GCC或Clang,以及CMake的最新版本。 接下来,用户下载的是bun-main,可能是指Bun的主分支代码库。通常,编译这样的项目需要先克隆仓库,然后进入项目目录,创建构建目录,运行CMake生成构建文件,最后使用make进行编译。引用[1]中的步骤正好覆盖了这些步骤,所以我可以直接参考这些步骤,并针对bun-main进行调整。 需要注意的是,Bun项目可能有特定的依赖项,比如额外的库或工具链组件。用户可能在安装过程中遇到问题,比如路径权限问题或缺少依赖库。例如,引用[3]中提到安装Visual Studio时的路径问题,可能类似的问题在编译Bun时也会出现,比如共享组件路径无法修改,这时候可能需要用户检查之前的安装或调整环境变量。 另外,用户可能需要确保他们的系统满足所有构建依赖,例如,在Ubuntu上可能需要安装build-essential、libssl-dev等包。如果用户在Windows上操作,可能需要使用WSL或者MSYS2环境,因为Bun可能主要针对类Unix系统设计。但根据引用[1]中的示例,使用的是标准的Linux命令行步骤,所以假设用户可能在Linux或macOS环境下操作。 还有,编译完成后,用户可能需要运行测试或安装到系统路径。引用[1]中的步骤到make为止,可能生成的可执行文件在build目录下,用户需要手动添加到PATH或者使用make install进行安装,但原引用中没有提到,可能需要补充说明。 最后,确保用户按照正确的顺序执行步骤,比如先进入build目录再运行cmake ..,这很重要。如果用户遇到权限问题,可能需要sudo权限来执行安装步骤,但原教程中没有提到,所以可能需要提醒用户根据实际情况处理。</think>根据Bun项目的编译指南[^1],以下是编译安装bun-main的具体步骤: ### 步骤一:安装依赖环境 1. 安装C++编译器(g++或clang) ```bash sudo apt-get install build-essential # Ubuntu/Debian brew install llvm # macOS ``` 2. 安装CMake构建工具 ```bash sudo apt-get install cmake # Ubuntu/Debian brew install cmake # macOS ``` ### 步骤二:源码编译 ```bash # 进入项目目录(假设已下载bun-main.zip并解压) cd bun-main # 创建独立构建目录(避免污染源码) mkdir build && cd build # 生成Makefile(注意..表示上级目录) cmake .. # 启动编译进程(使用多核加速) make -j$(nproc) ``` 编译完成后可执行文件会生成在$build/bin目录下 ### 步骤三:安装到系统路径 ```bash sudo make install # 需要root权限 ``` 安装后可通过`bun --version`验证 ### 常见问题处理 1. **缺失依赖库**:若出现链接错误,可能需要安装openssl等开发库 ```bash sudo apt-get install libssl-dev ``` 2. **CMake版本过低**:要求CMake 3.15+ 3. **权限问题**:建议在用户目录编译,避免使用系统级目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值