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();
}
}
@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 路径下
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )