|
@@ -1,4 +1,4 @@
|
|
|
-# Постановка задачи. Создание сервера express.js. Структура проекта express.js.
|
|
|
|
|
|
|
+# Постановка задачи. Создание сервера express.js. Подключение и настройка sequelize.
|
|
|
|
|
|
|
|
Напишем полноценное АПИ для проекта "ресторан" используя **express.js**.
|
|
Напишем полноценное АПИ для проекта "ресторан" используя **express.js**.
|
|
|
|
|
|
|
@@ -64,7 +64,7 @@
|
|
|
|
|
|
|
|
* `app.get('/', (req, res) => {})` - **endpoint** (конечная точка), которая будет обрабатывать входящий запрос. В данном случае метод `GET` по пути `/`.
|
|
* `app.get('/', (req, res) => {})` - **endpoint** (конечная точка), которая будет обрабатывать входящий запрос. В данном случае метод `GET` по пути `/`.
|
|
|
|
|
|
|
|
- В параметрах лямбда функции приходят объекты `req` (request - запрос, их этого объекта мы можем извлеч параметры и тело запроса) и `res` (response - ответ, сюда мы должны вернуть результат запроса)
|
|
|
|
|
|
|
+ В параметрах лямбда функции приходят объекты `req` (request - запрос, из этого объекта мы можем извлечь параметры и тело запроса) и `res` (response - ответ, сюда мы должны вернуть результат запроса)
|
|
|
|
|
|
|
|
* `app.listen(port, () => {})` - запуск сервера на указанном порту
|
|
* `app.listen(port, () => {})` - запуск сервера на указанном порту
|
|
|
|
|
|
|
@@ -107,7 +107,7 @@ npx sequelize-cli init
|
|
|
|
|
|
|
|
#### Настройка
|
|
#### Настройка
|
|
|
|
|
|
|
|
-Далее нам нужно сообщить CLI, как подключиться к БД. Для этого откроем файл `config/config.json`. Он выглядит примерно так:
|
|
|
|
|
|
|
+Далее нам нужно сообщить CLI, как подключиться к БД. Для этого откроем файл [`config/config.json`](./config/config.json). Он выглядит примерно так:
|
|
|
|
|
|
|
|
```json
|
|
```json
|
|
|
{
|
|
{
|
|
@@ -141,7 +141,7 @@ npx sequelize-cli init
|
|
|
* **test** - тестирование
|
|
* **test** - тестирование
|
|
|
* **production** - "боевая" БД
|
|
* **production** - "боевая" БД
|
|
|
|
|
|
|
|
-Хранить логин/пароль к БД в открытом доступе нельзя, поэтому перепишите `config/config.json` таким образом:
|
|
|
|
|
|
|
+Хранить логин/пароль к БД в открытом доступе нельзя, поэтому перепишите [`config/config.json`](./config/config.json) таким образом:
|
|
|
|
|
|
|
|
```json
|
|
```json
|
|
|
{
|
|
{
|
|
@@ -198,7 +198,7 @@ npx sequelize-cli db:create [--url=<строка подключения>]
|
|
|
Если всё настроили правильно, то при запуске выдаст примерно такое:
|
|
Если всё настроили правильно, то при запуске выдаст примерно такое:
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
-~/[ЙОТК]/ПиРИС/api$ npx sequelize-cli db:create
|
|
|
|
|
|
|
+> npx sequelize-cli db:create
|
|
|
|
|
|
|
|
Sequelize CLI [Node: 23.9.0, CLI: 6.6.3, ORM: 6.37.7]
|
|
Sequelize CLI [Node: 23.9.0, CLI: 6.6.3, ORM: 6.37.7]
|
|
|
|
|
|
|
@@ -239,7 +239,7 @@ module.exports = {
|
|
|
};
|
|
};
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-В методе `up` мы должны прописать команды для создания таблиц, а в методе `down` для удаления. В первой минграции мы создадим таблицу `MenuItem` для хранения блюд:
|
|
|
|
|
|
|
+В методе `up` мы должны прописать команды для создания таблиц, а в методе `down` для удаления. В первой минграции мы создадим таблицу `MenuItem` для хранения блюд (тут вроде все более менее понятно, подробно расписывать не буду - если что-то не понятно, то можно загуглить):
|
|
|
|
|
|
|
|
```js
|
|
```js
|
|
|
'use strict';
|
|
'use strict';
|
|
@@ -282,7 +282,7 @@ module.exports = {
|
|
|
}
|
|
}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-И "накатим" её командой
|
|
|
|
|
|
|
+И "накатим" её командой:
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
npx sequelize-cli db:migrate [--url <строка подключения к БД>]
|
|
npx sequelize-cli db:migrate [--url <строка подключения к БД>]
|
|
@@ -291,7 +291,7 @@ npx sequelize-cli db:migrate [--url <строка подключения к БД
|
|
|
Логи консоли:
|
|
Логи консоли:
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
-~/[ЙОТК]/ПиРИС/api$ npx sequelize-cli db:migrate
|
|
|
|
|
|
|
+> npx sequelize-cli db:migrate
|
|
|
|
|
|
|
|
Sequelize CLI [Node: 23.9.0, CLI: 6.6.3, ORM: 6.37.7]
|
|
Sequelize CLI [Node: 23.9.0, CLI: 6.6.3, ORM: 6.37.7]
|
|
|
|
|
|
|
@@ -317,7 +317,7 @@ const { sequelize } = require('./models')
|
|
|
const { QueryTypes } = require('sequelize')
|
|
const { QueryTypes } = require('sequelize')
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-И поменяем endpoint:
|
|
|
|
|
|
|
+И поменяем endpoint (я добавил префикс `/api`, он нам понадобится при настройке nginx, когда будем заворачивать апи в контейнер):
|
|
|
|
|
|
|
|
```js
|
|
```js
|
|
|
app.get('/api/menu-item', async (req, res) => {
|
|
app.get('/api/menu-item', async (req, res) => {
|
|
@@ -344,7 +344,7 @@ app.get('/api/menu-item', async (req, res) => {
|
|
|
|
|
|
|
|
## Создание скрипта для наполнения БД начальными данными
|
|
## Создание скрипта для наполнения БД начальными данными
|
|
|
|
|
|
|
|
-Sequelize позволяет добавить записи в таблицы (можно использовать для первоначальной инициализации словарей или при тестировании)
|
|
|
|
|
|
|
+**Sequelize** позволяет добавить записи в таблицы (можно использовать для первоначальной инициализации словарей или при тестировании)
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
npx sequelize-cli seed:generate --name menu-items
|
|
npx sequelize-cli seed:generate --name menu-items
|
|
@@ -382,7 +382,7 @@ module.exports = {
|
|
|
npx sequelize-cli db:seed:all
|
|
npx sequelize-cli db:seed:all
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-Можно откатить отдельный импорт, но накатить можно только все разом. Поэтому для заполнения словарей лучше использовать bulkInsert в обычной миграции, а seeders использовать для тестов.
|
|
|
|
|
|
|
+Можно откатить отдельный импорт, но накатить можно только все разом. Поэтому для заполнения словарей лучше использовать _bulkInsert_ в обычной миграции, а seeders использовать для тестов.
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|