1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dog-ts-restful

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

restful

File                    |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
------------------------|----------|----------|----------|----------|-------------------|
All files               |    86.98 |    76.92 |    84.62 |    86.91 |                   |
 ts-restful             |      100 |      100 |      100 |      100 |                   |
  index.ts              |      100 |      100 |      100 |      100 |                   |
 ts-restful/core        |    87.93 |    68.12 |    82.05 |    87.57 |                   |
  AbstractController.ts |      100 |      100 |      100 |      100 |                   |
  constant.ts           |      100 |      100 |      100 |      100 |                   |
  decorator.ts          |    92.44 |    80.43 |    90.63 |    92.17 |... ,38,70,143,175 |
  swagger.ts            |    66.67 |    43.48 |    33.33 |    66.67 |... 05,207,215,216 |
 ts-restful/core/router |    86.03 |    81.29 |    88.46 |    86.12 |                   |
  index.ts              |    86.03 |    81.29 |    88.46 |    86.12 |... 68,371,373,374 |

### Быстрое использование
- Поддержка express и KOA
- Для упрощения использования модуля ts-express-restful реализован модуль [restful-started](https://www.npmjs.com/package/restful-started), который можно запустить одной командой с использованием стандартных настроек.

### Основные функции этого модуля

- Автоматическое сканирование контроллеров для создания маршрутов в соответствии с соглашениями
- Внедрение зависимостей
- Автоматическая инъекция параметров функций
- В целом, это уменьшает количество шаблонного кода и делает код проекта более читаемым.

Когда мы используем nodejs express для разработки веб-проектов, пишем ли мы много кода для маршрутизации и сопоставления контроллеров? Следуем ли мы принципам RESTful при реализации наших правил маршрутизации? ts-express-restful помогает упростить сопоставление маршрутизации и контроллеров, если вы следуете принципам RESTful. Вам нужно только сосредоточиться на способе предоставления ресурсов, а остальное сделает ts-express-restful. Конечно, вы можете легко настроить маршрутизацию, просто добавив аннотацию. Спасибо spring mvc за то, что он послужил мне примером.


### Логика автоматического сопоставления маршрутов и контроллеров
---

Здесь ctrl обозначает имя класса контроллера без суффикса Controller. Например, если имя класса — UserController, то ctrl будет user.

| Функция контроллера | Сопоставленный HTTP-метод | Сопоставленный маршрут |
| ----------------- | --------------------- | -------------------- |
| find             | /ctrl/                 | GET                  |
| get             | /ctrl/:id              | GET                  |
| update          | /ctrl/:id              | PUT                  |
| add             | /ctrl/                 | POST                 |
| delete          | /ctrl/:id              | DELETE               |
| @Router("/other", "GET")| /ctrl/other           | GET                  |

### Описание основных функций и аннотаций
---

- @Restful @Restful(mountUrl)
   - Превращает контроллер в RestfulController. Этот декоратор может принимать URL-адрес функции, указывающий, где должен быть смонтирован контроллер. Если URL-адрес не указан, используется имя контроллера без суффикса Controller.

- @Router(url, method?: string, options: any) 
  - Превращает функцию контроллера в доступный извне HTTP API. Этот декоратор позволяет настраивать URL-адреса функций контроллера.

- @RequestMapping @PostMapping @GetMapping
  - Аналогично @Router.

- scannerDecorator 
  - Эта функция сканирует пути с аннотациями.

- registerControllerToRouter 
  - Регистрирует все контроллеры, отмеченные @Restful, в маршрутизаторе.

- (controller instance).$isValidId 
  - Проверяет формат идентификатора контроллера. Если эта функция возвращает false, идентификатор не считается действительным.

- (controller instance).$before
  - Вызывает функцию $before перед каждой функцией контроллера. Эту функцию можно использовать для проверки прав доступа или унификации данных.

- <del>@ResponseBody()</del> 
  - Возвращает результат функции как ответное содержимое.

- <del>@SchemaFilter(schema: any, checkType: boolean) </del>
  - Фильтрует ответ в соответствии со схемой. Если checkType не указано или равно false, ответ проверяется на соответствие схеме.

- @Autowire 
  - Автоматически внедряет сервисы.

- @Service 
  - Помечает класс как сервис.

- @RequestBody @RequestBodyParam @RequestParam @HttpRequest @HttpResponse @QueryStringParam @Header @Cookie
  - Автоматически вводит параметры функции.
  - @RequestBody вводит req.body.
  - @RequestBodyParam вводит req.body.[имя параметра].
  - @RequestParam вводит req.param.[имя параметра].
  - @QueryStringParam вводит req.query.[имя параметра].
  - @HttpRequest вводит req.
  - @HttpResponse вводит response.
  - @NextFunction вводит next.
  - @Cookie вводит значение cookie в req.cookies[имя параметра].
  - @Header вводит значение заголовка в req.headers[имя параметра].

### Использование
---

###### В tsconfig.json включите emitDecorateMetadata.

Обратите внимание: после версии 5.0 рекомендуется использовать @RequestBody, @RequestParam и другие методы для получения параметров вместо прямого использования req, res и т. д. Это упрощает создание документации.

```javascript
// router/index.ts 

import http = require("http");

import {scannerControllers, registerControllerToRouter} from "ts-express-restful";

import path = require("path");
import express = require("express");
var router = express.Router();

scannerControllers(path.join(__dirname, 'controller'));
// Смонтировать в express
registerControllerToRouter(router);


export async function
``` **initHttp(app)**

    app.use('/api/v1', router);

**Либо монтируем в Koa**

    // import * as Router from 'koa-router';
    // var app = new Koa();
    // var route = new Router();
    registerControllerToKoaRouter(router);
    app.use(route.routes());
// controller/city.ts
import {AbstractController, Restful, Router} from "ts-express-restful";

// Здесь может быть @Restful('/test')
@Restful()
export class TestController extends AbstractController {
    constructor() {
        super();;
    }

    $isValidId(id: string) {
        // Только ID является числом, считается ID, например /test/1 можно запросить до get /test/xx для возврата 404 /test/other для сопоставления с функцией other
        return /^\d+$/.test(id);
    }


    // Адрес вызова /test/:id
    async get(@RequestParam id: number) {
        return {
            id
        }
    }

    // Адрес вызова /test/other
    @Router("/other")
    async other(@RequestParam other: string) {
        return {
            other,
        }
    }
}

Автоматическое внедрение сервиса

    @Service()
    export class TestService {

        sayHello() {
            return 'hello world';
        }
    }

    @Restful
    export class TestController {

        @Autowire
        test: TestService;

        @GetMapping("/helloword")
        sayHello() {
            return this.test.sayHello();
        }
    }

@RequestBody @RequestBodyParam @QueryStringParam @HttpRequest @HttpRepsonse

@Restful()
export class TestController {

    @PostMapping("/test")
    async test(@RequestBody test: Test) {
        return test;
    }

    @GetMapping("/test2")
    async test2(@QueryStringParam keyword: string, @QueryString password: string) {
        return {keyword, password};
    }

    @PostMapping("/test3")
    async test3(@HttpRequest req: Request) {
        let body = req.body;
        return body;
    }
    
}

Автоматически генерируемый документ

     swagger 文档默认挂在在 /swagger 路径下

changelog

  • V 3.0 поддерживает @SchemaFilter, напрямую поддерживает результаты фильтрации, возвращаемые клиенту, в соответствии с указанной схемой, схема ссылается на https://www.npmjs.com/package/json-filter2
  • v 4.0 использует reflect-metadata для повторной реализации метаданных
  • v 4.0 повторно реализует @Service @Autowire
  • v 5.0 поддерживает автоматическое внедрение @RequestBody @RequestBodyParam @RequestParam @QueryStringParam @HttpRequest @HttpResponse в параметры функции контроллера
  • v 6.0 поддерживает KOA, поддерживает @Header, @Cookie

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Использование декораторов TypeScript для упрощения разработки RESTful, Spring MVC в Node. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dog-ts-restful.git
git@api.gitlife.ru:oschina-mirror/dog-ts-restful.git
oschina-mirror
dog-ts-restful
dog-ts-restful
master