bun-serve-route-plus
Version:
Middleware & route group system for Bun's HTTP server
112 lines (93 loc) β’ 2.81 kB
Markdown
# Bun Serve Route Plus
[](https://opensource.org/licenses/MIT)
Enhanced middleware and route grouping for Bun's native HTTP server routes configuration.
## Features
- π **Middleware Support**: Add before-request and after-response middleware
- π **Route Grouping**: Organize routes with common prefixes
- β‘ **Lightweight**: Zero dependencies, built for Bun's native server
- π¦ **TypeScript Ready**: Full type definitions included
- β¨ **Clean API**: Simple and intuitive syntax
## Installation
```bash
bun add bun-serve-route-plus
```
## Usage
```typescript
// mini
import { serve } from 'bun';
import { authMiddleware } from './middleware/auth';
import { m, beforeRequest } from 'bun-serve-route-plus';
beforeRequest.use(authMiddleware)
serve({
port:12580,
fetch: () => new Response('ε₯½εζ₯ιε°ζΉδΊ'),
routes: m({
'/api/abc': () => new Response('Hello, /api/abc'),
'/vip': () => new Response('Hello, /vip')
})
})
```
```typescript
// normal
import { serve } from 'bun';
import { cors } from './middleware/cors';
import { authMiddleware } from './middleware/auth';
import { useMiddleware, useGroup, beforeRequest } from 'bun-serve-route-plus';
import UserApi from './router/user';
cors()
beforeRequest.use(authMiddleware)
const app = serve({
port:12580,
fetch: () => new Response('ε₯½εζ₯ιε°ζΉδΊ'),
routes: useMiddleware(
{
'/api/abc': () => new Response('Hello, /api/abc')
},
useGroup('api/v1',
useGroup('user', UserApi),
useGroup('goods', {
'/vip': () => new Response('Hello, /api/v1/goods/vip')
})
)
)
})
console.log(
`π Server Is Running At \n\n ${app.url.href}`
)
```
```typescript
// middleware/cors.ts
import { CORS_HEADERS } from "../config";
import { beforeRequest, beforeResponse } from "../class/middleware";
export const cors = (option = CORS_HEADERS) => {
beforeRequest.use((request) => {
if(request.method == 'OPTIONS') return new Response('Departed', option);
})
beforeResponse.use((response) => {
if(!response.headers) return response
response.headers.set('Access-Control-Allow-Origin', '*');
response.headers.set('Access-Control-Allow-Methods', 'GET, POST');
return response
})
}
```
**Request Middleware:**
```typescript
beforeRequest.use((req) => {
console.log(`Incoming request: ${req.url}`);
// Return a Response to short-circuit the request
});
beforeRequest.use(async (req) => {
const auth = req.headers.get('Authorization');
if (!auth) return new Response('Unauthorized', { status: 401 });
});
```
**Response Middleware:**
```typescript
beforeResponse.use((res) => {
res.headers.set('X-Powered-By', 'Bun');
return res;
});
```
## License
MIT Β© [LiuYT2103]