FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

chore(labs): `Lab4` add nestjs example · iu5git/JavaScript@8d15cdf · GitHub

Commit 8d15cdf

Browse files
committed
chore(labs): Lab4 add nestjs example
1 parent 69a7d44 commit 8d15cdf

34 files changed

Lines changed: 11247 additions & 3 deletions

‎tutorials/backend/README.md‎

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,120 @@ app.listen(port, host, () => {
690690

691691
Теперь наше API умеет читать акции, создавать, а также удалять их.
692692

693+
## 5. Пишем API на NestJS
694+
695+
NestJS - мощный фреймворк для создания серверных приложений на NodeJS с полной поддержкой TypeScript и готовой архитектурой из коробки. Также NestJS предоставляет DI систему, которая позволяет гибко конфигурировать провайдеры приложения.
696+
697+
Начнем с установки CLI и создания нового приложения:
698+
699+
700+
```shell
701+
npm i -g @nestjs/cli
702+
nest new lab4 --strict
703+
```
704+
705+
```shell
706+
✨ We will scaffold your app in a few seconds..
707+
708+
✔ Which package manager would you ❤️ to use? npm
709+
CREATE lab4/.prettierrc (51 bytes)
710+
CREATE lab4/README.md (5020 bytes)
711+
CREATE lab4/eslint.config.mjs (856 bytes)
712+
CREATE lab4/nest-cli.json (171 bytes)
713+
CREATE lab4/package.json (2030 bytes)
714+
CREATE lab4/tsconfig.build.json (97 bytes)
715+
CREATE lab4/tsconfig.json (541 bytes)
716+
CREATE lab4/src/app.controller.ts (274 bytes)
717+
CREATE lab4/src/app.module.ts (249 bytes)
718+
CREATE lab4/src/app.service.ts (142 bytes)
719+
CREATE lab4/src/main.ts (228 bytes)
720+
CREATE lab4/src/app.controller.spec.ts (617 bytes)
721+
CREATE lab4/test/jest-e2e.json (183 bytes)
722+
CREATE lab4/test/app.e2e-spec.ts (674 bytes)
723+
724+
✔ Installation in progress... ☕
725+
726+
🚀 Successfully created project lab4
727+
728+
```
729+
730+
NestJS cli создаст скелет приложения. Запустим командой `npm run start` и посмотрим на результат `http://localhost:3000`:
731+
732+
![Hello World!](hello-world.png)
733+
734+
В данной лабораторной будет разработан сервис карточек, реализующий следующий REST API:
735+
736+
- GET /stocks/ - получение всех карточек
737+
- POST /stocks - создание новой карточки
738+
- GET /stocks/:id - получение карточки по ID
739+
- PATCH /stocks/:id - обновление карточки по ID
740+
- DELETE /stocks/:id - удаление карточки по ID
741+
742+
Создадим сущности, необходимые для CRUD операциями над карточками `stocks`. Флаг `--no-spec` отключает генерацию тестовых файлов - в данной лабораторной они не понадобятся.
743+
744+
```shell
745+
➜ lab4 git:(main) ✗ nest generate resource stocks --no-spec
746+
✔ What transport layer do you use? REST API
747+
✔ Would you like to generate CRUD entry points? Yes
748+
CREATE src/stocks/stocks.controller.ts (915 bytes)
749+
CREATE src/stocks/stocks.module.ts (255 bytes)
750+
CREATE src/stocks/stocks.service.ts (623 bytes)
751+
CREATE src/stocks/dto/create-stock.dto.ts (31 bytes)
752+
CREATE src/stocks/dto/update-stock.dto.ts (173 bytes)
753+
CREATE src/stocks/entities/stock.entity.ts (22 bytes)
754+
UPDATE package.json (2063 bytes)
755+
UPDATE src/app.module.ts (316 bytes)
756+
✔ Packages installed successfully.
757+
```
758+
759+
При генерации нового CRUD источника автоматически создаются следующие абстракции:
760+
761+
- Module - группирующая сущность для объединения нескольких элементов, решающих общую задачу;
762+
- Controller - контроллер эндпоинтов, отвечает за обработку пользовательских запросов и возвращение корректных результатов;
763+
- Service - сервис, отвечающий за определенную логику взаимодействия;
764+
- Entities - модели данных источника;
765+
- Dto - "транспортные" сущности, отражающие состояние модели данных при передаче между архитектурными границами приложения
766+
767+
После кодогенерации получаем такие файлы в папке `stocks`:
768+
769+
`stocks.controller`:
770+
```ts
771+
@Controller('stocks')
772+
export class StocksController {
773+
constructor(private readonly stocksService: StocksService) {}
774+
775+
@Post()
776+
create(@Body() createStockDto: CreateStockDto) {
777+
return this.stocksService.create(createStockDto);
778+
}
779+
780+
@Get()
781+
findAll() {
782+
return this.stocksService.findAll();
783+
}
784+
785+
@Get(':id')
786+
findOne(@Param('id') id: string) {
787+
return this.stocksService.findOne(+id);
788+
}
789+
790+
@Patch(':id')
791+
update(@Param('id') id: string, @Body() updateStockDto: UpdateStockDto) {
792+
return this.stocksService.update(+id, updateStockDto);
793+
}
794+
795+
@Delete(':id')
796+
remove(@Param('id') id: string) {
797+
return this.stocksService.remove(+id);
798+
}
799+
}
800+
```
801+
802+
`stocks.module`:
803+
`stocks.service`:
804+
805+
...
806+
693807
## 7. ЗАДАНИЕ
694808

695809
1. Необходимо в ваши проекты с 3-5 лабораторную работу добавить возможность добавления и удаления карточек.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[
2+
{
3+
"id": 1,
4+
"src": "https://i.pinimg.com/originals/c9/ea/65/c9ea654eb3a7398b1f702c758c1c4206.jpg",
5+
"title": "Акция",
6+
"text": "Такой акции вы еще не видели 1"
7+
},
8+
{
9+
"id": 2,
10+
"src": "https://i.pinimg.com/originals/c9/ea/65/c9ea654eb3a7398b1f702c758c1c4206.jpg",
11+
"title": "Акция",
12+
"text": "Такой акции вы еще не видели 2"
13+
},
14+
{
15+
"id": 3,
16+
"src": "https://i.pinimg.com/originals/c9/ea/65/c9ea654eb3a7398b1f702c758c1c4206.jpg",
17+
"title": "Акция",
18+
"text": "Такой акции вы еще не видели 3"
19+
},
20+
{
21+
"id": 5,
22+
"src": "https://i.pinimg.com/originals/c9/ea/65/c9ea654eb3a7398b1f702c758c1c4206.jpg",
23+
"title": "Акция",
24+
"text": "Такой акции вы еще не видели 5"
25+
}
26+
]
File renamed without changes.

tutorials/backend/example/internal/stocks/StockDAO.js renamed to tutorials/backend/example-express/internal/stocks/StockDAO.js

File renamed without changes.

tutorials/backend/example/internal/stocks/StocksController.js renamed to tutorials/backend/example-express/internal/stocks/StocksController.js

File renamed without changes.

tutorials/backend/example/internal/stocks/StocksRepository.js renamed to tutorials/backend/example-express/internal/stocks/StocksRepository.js

File renamed without changes.

tutorials/backend/example/internal/stocks/StocksService.js renamed to tutorials/backend/example-express/internal/stocks/StocksService.js

File renamed without changes.

tutorials/backend/example/internal/stocks/index.js renamed to tutorials/backend/example-express/internal/stocks/index.js

File renamed without changes.
File renamed without changes.

tutorials/backend/example/package-lock.json renamed to tutorials/backend/example-express/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL