# malagu **Repository Path**: dsunsoft/malagu ## Basic Information - **Project Name**: malagu - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Malagu *([https://github.com/cellbang/malagu](https://github.com/cellbang/malagu))* Malagu 是基于 TypeScript 的 Serverless First、可扩展和组件化的应用框架。 *其他语言版本:[English](README.md)* **主要特点:** 1. 基于 TypeScript 1. 零配置 1. NodeJs 版 Spring Boot 1. Serverless First 1. 组件化 1. 前后端一体化 1. 面向切面编程(AOP) 1. 集成了 ORM 框架 1. 命令工具插件化 Malagu 名字由来:在我的家乡,谐音“吗啦咕”是小石头的意思,小石头堆砌起来可以建成高楼大厦、道路桥梁,而 Malagu 组件编排可以实现千变万化的应用。 ## 文档 查看[文档](https://www.yuque.com/cellbang/malagu)。 ## 快速开始 1. 创建应用 ![](https://img.alicdn.com/tfs/TB1BjYFcIKfxu4jSZPfXXb3dXXa-1425-818.gif) 2. 本地运行应用 ![](https://gw.alicdn.com/tfs/TB1Vb1rA.Y1gK0jSZFCXXcwqXXa-1425-818.gif) 3. 本地调试应用 ![](https://img.alicdn.com/tfs/TB1j5KtAYj1gK0jSZFuXXcrHpXa-1425-818.gif) 4. 部署应用 ![](https://img.alicdn.com/tfs/TB1SbCnA4z1gK0jSZSgXXavwpXa-1425-818.gif) ## 依赖注入 ```typescript @Component() export class A { } @Component() export class B { @Autowired() protected a: A; } ``` ## 属性注入 ```typescript @Component() export class A { @Value('foo') // 支持 EL 表达式语法,如 @Value('obj.xxx')、@Value('arr[1]') 等等 protected foo: string; } ``` ## MVC ```typescript @Controller('users') export class UserController { @Get() list(): Promise { ... } @Get(':id') get(@Param('id') id: number): Promise { ... } @Delete(':id') async remove(@Param('id') id: number): Promise { ... } @Put() async modify(@Body() user: User): Promise { ... } @Post() create(@Body() user: User): Promise { ... } } ``` ## 数据库操作 ```typescript import { Controller, Get, Param, Delete, Put, Post, Body } from '@malagu/mvc/lib/node'; import { Transactional, OrmContext } from '@malagu/typeorm/lib/node'; import { User } from './entity'; @Controller('users') export class UserController { @Get() @Transactional({ readOnly: true }) list(): Promise { const repo = OrmContext.getRepository(User); return repo.find(); } @Get(':id') @Transactional({ readOnly: true }) get(@Param('id') id: number): Promise { const repo = OrmContext.getRepository(User); return repo.findOne(id); } @Delete(':id') @Transactional() async remove(@Param('id') id: number): Promise { const repo = OrmContext.getRepository(User); await repo.delete(id); } @Put() @Transactional() async modify(@Body() user: User): Promise { const repo = OrmContext.getRepository(User); await repo.update(user.id, user); } @Post() @Transactional() create(@Body() user: User): Promise { const repo = OrmContext.getRepository(User); return repo.save(user); } } ```