0.4.23 • Published 2 years ago

tora v0.4.23

Weekly downloads
590
License
MIT
Repository
github
Last release
2 years ago

Tora

基于 typescript reflect 实现的依赖注入服务框架。

文档

Github

安装

需要 typescript 4.2 以上。

$ npm install tora

Hello Tora

import { ApiParams, Platform, Post, ToraRouter } from 'tora'

@ToraRouter('/hello')
export class TestRouter {

    @Post()
    async test(
            params: ApiParams<{
                hello: string
            }>) {

        return { hello: params.get('hello') }
    }

}

new Platform()
        .load_config({ tora: { port: 3000 } })
        .route(TestRouter)
        .start()

// $ curl --request POST --url http://localhost:3000/hello/test --header 'Content-Type: application/json' --data '{ "hello": "world" }'
// $ {"hello":"world"}

认识 Tora 组件

Tora 中的核心组件有四种:

  • [ToraService] 用来实现可以注入的服务。
  • [ToraModule] 用于提供 ToraService,加载其他 ToraModule,是连接服务的中枢。
  • [ToraRoot] 特殊 ToraModule,可以携带 routers 和 tasks,作为 Platform 的启动入口。
  • [ToraRouter] 特殊 ToraModule,用于实现 API,提供服务,加载模块。
  • [ToraTrigger] 特殊 ToraModule,用于实现定时任务。

先实现一个最基础的 Service,以一定格式把两个字符串拼起来。

import { ToraService } from 'tora'

@ToraService()
export class AssembleStringService {

    assemble(front: string, rear: string) {
        return `${front}^_^${rear}`
    }
}

接下来我们来使用这个服务。 我们先构建一个可以请求的接口,这样可以直接看到运行结果。

@ToraRouter('/test', {
    providers: [
        AssembleStringService, // 需要有一个可以提供这个服务的模块在,
    ]
})
export class SampleRouter {

    constructor(
            // 这样就获得了这个服务。
            private assemble_string: AssembleStringService
    ) {
    }

    @Get()
    async sample() {
        return {
            // 使用服务生成字符串并返回。
            res: this.assemble_string.assemble('@@@', '$$$')
        }
    }
}

// $ curl -X GET --url http://localhost:3000/test/sample
// $ { "res": "@@@^_^$$$" }

下面展示如何使用 ToraModule 进行模块连接。先创建一个 ToraModule。

@ToraModule({
    providers: [
        AssembleStringService, // 这次由 SampleModule 进行服务提供。,
    ]
})
export class SampleModule {

}

将 ToraRouter 元数据做如下修改。

@ToraRouter('/test', {
    // providers: [
    //     AssembleStringService,
    // ]
    imports: [
        SampleModule, // 这次将模块加在这里。
    ]
})
export class SampleRouter {

    constructor(
            // 同样的方式使用这个服务。
            private assemble_string: AssembleStringService
    ) {
    }
}

启动 Tora

我们现在有了一个使用自定义服务的 API。下面看看怎么启动它。 Tora 的启动入口是 Platform 类。

new Platform()
        .load_config({ tora: { port: 3000 } }) // 这个配置文件格式定义在了 global.ToraConfigSchema 接口中,可以通过生命合并扩展这个接口。
        .route(SampleRouter) // 这样就挂载了 SampleRouter
        .start() // 这样就开始监听了。

// 输出内容如下:
// tora server starting...
//     listen at port 3000...
//
// tora server started successfully in 0.004s.

大多数情况我们的一个服务不止是启动一个接口,而是一批接口以及若干定时任务。 这时我们可以使用 [ToraRoot]

@ToraRoot({
    imports: [SampleModule1, SampleModule2, /* ... */],
    providers: [SampleService1, SampleService2, /* ... */],
    routers: [SampleRouter1, SampleRouter2, /* ... */],
    tasks: [SampleTrigger1, SampleTrigger2, /* ... */],
})
export class SampleRoot {
}

new Platform()
        .load_config({ tora: { port: 3000 } })
        .bootstrap(SampleRoot) // 这样就可以加载一个 Root 模块。
        .start()
0.4.20

2 years ago

0.4.21

2 years ago

0.4.22

2 years ago

0.4.23

2 years ago

0.4.19

2 years ago

0.4.17

2 years ago

0.4.18

2 years ago

0.4.15

2 years ago

0.4.16

2 years ago

0.4.9

3 years ago

0.4.10

3 years ago

0.4.13

3 years ago

0.4.14

3 years ago

0.4.11

3 years ago

0.4.12

3 years ago

0.4.8

3 years ago

0.4.5

3 years ago

0.4.4

3 years ago

0.4.7

3 years ago

0.4.6

3 years ago

0.4.1

3 years ago

0.4.0

3 years ago

0.4.3

3 years ago

0.4.2

3 years ago

0.3.26

3 years ago

0.3.25

3 years ago

0.3.24

3 years ago

0.3.20

3 years ago

0.3.23

3 years ago

0.3.22

3 years ago

0.3.21

3 years ago

0.3.19

3 years ago

0.3.18

3 years ago

0.3.17

3 years ago

0.3.16

3 years ago

0.3.15

3 years ago

0.3.14

3 years ago

0.3.13

3 years ago

0.3.12

3 years ago

0.3.11

3 years ago

0.3.9

3 years ago

0.3.10

3 years ago

0.3.8

3 years ago

0.3.6

3 years ago

0.3.5

3 years ago

0.3.7

3 years ago

0.3.4

3 years ago

0.3.2

3 years ago

0.3.3

3 years ago

0.3.0

3 years ago

0.3.1

3 years ago

0.2.27

3 years ago

0.2.26

3 years ago

0.2.25

3 years ago

0.2.24

3 years ago

0.2.23

3 years ago

0.2.22

3 years ago

0.2.21

3 years ago

0.2.20

3 years ago

0.2.19

3 years ago

0.2.18

3 years ago

0.2.17

3 years ago

0.2.16

3 years ago

0.2.15

3 years ago

0.2.14

3 years ago

0.2.13

3 years ago

0.2.12

3 years ago

0.2.11

3 years ago

0.2.10

3 years ago

0.2.1

3 years ago

0.2.0

3 years ago

0.2.28

3 years ago

0.2.7

3 years ago

0.2.6

3 years ago

0.2.9

3 years ago

0.2.8

3 years ago

0.2.3

3 years ago

0.2.2

3 years ago

0.2.5

3 years ago

0.2.4

3 years ago

0.1.0

3 years ago

0.1.1

3 years ago

0.0.62

3 years ago

0.0.63

3 years ago

0.0.61

3 years ago

0.0.60

3 years ago

0.0.59

3 years ago

0.0.57

3 years ago

0.0.58

3 years ago

0.0.56

3 years ago

0.0.54

3 years ago

0.0.55

3 years ago

0.0.53

3 years ago

0.0.51

3 years ago

0.0.52

3 years ago

0.0.50

3 years ago

0.0.49

3 years ago

0.0.46

3 years ago

0.0.47

3 years ago

0.0.48

3 years ago

0.0.40

3 years ago

0.0.41

3 years ago

0.0.42

3 years ago

0.0.43

3 years ago

0.0.44

3 years ago

0.0.45

3 years ago

0.0.39

3 years ago

0.0.38

3 years ago

0.0.37

3 years ago

0.0.35

3 years ago

0.0.36

3 years ago

0.0.34

3 years ago

0.0.33

3 years ago

0.0.32

3 years ago

0.0.31

3 years ago

0.0.30

3 years ago

0.0.29

3 years ago

0.0.28

3 years ago

0.0.27

4 years ago

0.0.24

4 years ago

0.0.25

4 years ago

0.0.26

4 years ago

0.0.23

4 years ago

0.0.22

4 years ago

0.0.21

4 years ago

0.0.20

4 years ago

0.0.18

4 years ago

0.0.19

4 years ago

0.0.17

4 years ago

0.0.10

4 years ago

0.0.11

4 years ago

0.0.12

4 years ago

0.0.14

4 years ago

0.0.15

4 years ago

0.0.16

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago