0.0.8 • Published 10 months ago

mango-core v0.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
10 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

10 months ago

0.0.7

10 months ago

0.0.6

10 months ago

0.0.5

10 months ago

0.0.4

10 months ago

0.0.3

10 months ago

0.0.2

10 months ago

0.0.2-cjs

3 years ago

0.0.1-cjs

3 years ago

0.0.0

4 years ago

0.0.1

4 years ago