0.0.8 • Published 4 months ago

mango-core v0.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Mango

npm downloads GitHub stars GitHub forks

国内文档 外网文档

简介

Mango 是一个轻量级、高性能的 Web 框架,在Elysia的基础上进行的二次开发。它在既拥有智能类型提示的情况下又提供了一套完整的mvc开发方式

特性

  • 高性能:基于 Bun 的高效运行时,提供卓越的性能。
  • 简单易用:直观的 API 设计,让开发者可以快速上手。
  • 生态:基于Elysia改造而来,完全适配Elysia的插件、中间件、生态。
  • 内置路由:灵活的路由系统,支持动态路由和中间件。
  • TypeScript 支持:内置对 TypeScript 的支持,提升开发体验。
  • 支持 WebSocket:轻松实现WebSocket功能。
  • 支持 Cron:轻松实现定时任务功能。

安装

bun add mango-core elysia mango-types

快速开始

以下是一个使用 Mango 构建基本 Web 服务器的示例:

import { Controller, Get} from 'mango-core'
import type { Context } from 'mango-types'
@Controller({
  name: '测试模块',
  prefix: '/test',
  detail: {
    description: '这是一段测试模块的备注',
    tags: ['测试'],
  },
})
export default class DemoController {
  @Get('/test')
  login(data: Context) {
    return 'Hello Word!'
  }
}

依赖注入

import { Controller, Get} from 'mango-core'
import type { Context } from 'mango-types'
@Controller({
  name: '测试模块',
  prefix: '/test',
  detail: {
    description: '这是一段测试模块的备注',
    tags: ['测试'],
  },
})
export default class DemoController {

  @Get()
  test(store: Context) {
    
  }
}

路由

Mango 提供了一个简单的路由系统,以下是一些常用的路由示例:

支持Get, Post, Put, Delete, All, Option, Patch, Custom请求

其中被All装饰会命中所有的请求

Custom装饰器则是自定义请求方法

import { Controller, Get, Post, Put, Delete, All, Option, Patch, Custom} from 'mango-core'
import type { Context } from 'mango-types'
@Controller({
  name: '测试模块',
  prefix: '/test',
  detail: {
    description: '这是一段测试模块的备注',
    tags: ['测试'],
  },
})
export default class DemoController {
  @Get('/test')
  test1(data: Context) {
    return 'Hello Word!'
  }

  @Post('/test')
  test2(data: Context) {
    return 'Hello Word!'
  } 
}

定时任务

基于@elysiajs/cron封装

import { Controller, Get, Cron} from 'mango-core'
import type { Context } from 'mango-types'
@Controller({
  name: '测试模块',
  prefix: '/test',
  detail: {
    description: '这是一段测试模块的备注',
    tags: ['测试'],
  },
})
export default class DemoController {
  @Cron({
    name: 'task1',
    pattern: '*/20 * * * * *',
  })
  cronTask() {
    console.log('任务1')
  }

  @Get('/stop/task')
  stopTask({ stopCronTask }: Context) {
    stopCronTask('task1')
    return '停止任务1'
  }
}

WebSocket

import { Controller, WebSocket} from 'mango-core'
import type { WebSocketContext } from 'mango-types'
@Controller({
  name: '测试模块',
  prefix: '/test',
  detail: {
    description: '这是一段测试模块的备注',
    tags: ['测试'],
  },
})
export default class DemoController {
  @WebSocket('/ws', {
    body: t.Object({
      name: t.String(),
      age: t.Number(),
    }),
  })
  websocket(ws: WebSocketContext, message: any) {
    ws.send(message)
  }
}

自定义装饰器

注意,自定义装饰器必须在请求装饰器下面

import { Controller, Get, Post, Put, Delete, All, Option, Patch, Custom} from 'mango-core'
import type { Context } from 'mango-types'
import { createParameterDecorator, HttpStatus, JsonResponse } from 'mango-core'

const test = createParameterDecorator<{ body: any }>((context) => { if (!context.body.name) { return JsonResponse( { code: HttpStatus.BAD_REQUEST, msg: '缺少名字', }, HttpStatus.BAD_REQUEST, ) } return true })

@Controller({ name: '测试模块', prefix: '/test', detail: { description: '这是一段测试模块的备注', tags: '测试', }, }) export default class DemoController { @Post('/test') @test test1(data: Context) { return 'Hello Word!' } }

## 贡献

欢迎贡献

## 许可证

该项目采用 MIT 许可证
0.0.8

4 months ago

0.0.7

4 months ago

0.0.6

4 months ago

0.0.5

5 months ago

0.0.4

5 months ago

0.0.3

5 months ago

0.0.2

5 months ago

0.0.2-cjs

2 years ago

0.0.1-cjs

2 years ago

0.0.0

3 years ago

0.0.1

3 years ago