Mangojs快速上手 —— (一)初始化项目

237 阅读2分钟

🌱【极速入门】Mango框架初体验:5分钟搭建你的第一个RESTful API(附Swagger智能文档)🚀


🔥 为什么选择Mango框架?

Mango作为新一代轻量级Bun框架,集成了Elysia的高性能内核与Bun运行时的超强编译能力,更独创了**"零配置智能路由发现""企业级工程化规范"**。通过以下对比感受它的魅力:

  • 🚫 传统框架初始化耗时30分钟 → ✅ Mango仅需几行代码
  • 🚫 手动编写Swagger注解 → ✅ 自动生成API文档
  • 🚫 复杂目录结构配置 → ✅ 智能识别Controller路径

🌈 环境准备

  1. Bun运行时curl -fsSL https://bun.sh/install | bash

🛠️ 四步初始化实战

步骤1:闪电创建项目
mkdir mango-demo && cd mango-demo
bun init -y
bun add mango-core mango-types elysia

💡 框架特性:基于Bun的秒级依赖安装比npm快17倍!

步骤2:智能目录架构
mango-demo/
├── src/
│   ├── index.ts       # 服务入口(含热更新配置)
│   └── modules/       # 业务模块化设计
│       └── index.ts   # 智能路由控制器

🌟 设计哲学:约定优于配置,自动扫描modules下的控制器文件

注意:需要在tsconfig.json中添加配置以允许装饰器的使用

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}
步骤3:核心配置(附Swagger魔法)
// src/index.ts
import type { InferContext } from 'elysia'
import MangoCore from 'mango-core'

const mango = MangoCore.init({
  businessPath: 'src', // 业务代码根目录
  controllerPath: 'modules', // 控制器自动注册路径
  swagger: {
    path: '/swagger'
  }
}).listen(8899)

export type Context = InferContext<typeof mango>

✨ 即刻获得:自动生成的Swagger文档(访问localhost:8899/swagger

步骤4:编写首个Controller
// src/modules/index.ts
import { Controller, Get } from 'mango-core'
import type { Context } from '..'

@Controller({
  prefix: '/test',
  detail: { tags: ['测试'] }
})
export default class DemoController {
  @Get('', { detail: { description: '测试' } })
  async hello(context: Context) {
    return 'Hello Mango!'
  }
}

🎯 注解优势:通过装饰器自动生成API文档参数说明 在这里插入图片描述


🦊 添加脚本

// package.json
{
	 "scripts": {
	    "dev": "bun run --watch ./src/index.ts",
	    "build:linux": "rm -rf ./dist/server && bun build --compile --target=bun-linux-x64 --minify --sourcemap --bytecode ./src/index.ts --outfile dist/server"
  	},
}

🚀 启动与验证

bun run dev

控制台将闪现彩虹启动日志:

  __  __                                _           _             _             _           _
 |  \/  | __ _ _ __   __ _  ___     ___| |_   _ ___(_) __ _   ___| |_ __ _ _ __| |_ ___  __| |
 | |\/| |/ _` | '_ \ / _` |/ _ \   / _ \ | | | / __| |/ _` | / __| __/ _` | '__| __/ _ \/ _` |
 | |  | | (_| | | | | (_| | (_) | |  __/ | |_| \__ \ | (_| | \__ \ || (_| | |  | ||  __/ (_| |
 |_|  |_|\__,_|_| |_|\__, |\___/   \___|_|\__, |___/_|\__,_| |___/\__\__,_|_|   \__\___|\__,_|
                     |___/                |___/

version 1.0.0

-- [start] name: Mango Elysia
-- [start] env: undefined
-- [start] version: 1.0.0
-- [start] baseDir: E:\temp\mango
-- [start] businessPath: src
-- [start] controllerPath: src/modules

🐑 Swagger UI: http://localhost:8899//swagger
🦊【Mango Elysia】running at http://localhost:8899/

通过curl验证:

curl http://127.0.0.1:8899/test
# "Hello Mango!"

📚 下一步探索

  • 如何实现JWT鉴权(通过自定义装饰器)
  • 数据库集成教程(使用prisma)
  • 开启static(基于@elysiajs/static

👉 立即访问官方文档获取更多示例!


📢 创作声明:本文案例已通过Bun v1.1.12环境验证,欢迎在评论区留言!🗡️