Koa Js : Часть 2 — Подключение базы данных SQL к вашему серверу

Прежде чем начать, если у вас нет опыта работы с Koa, убедитесь, что вы прочитали первую часть этого руководства.

Если вы хотите следовать этому руководству, вы можете клонировать файл отсюда.

SQL-сервер KOA

Теперь, когда наш сервер запущен и работает, следующим шагом будет подключение его к базе данных. В этой части мы будем использовать базу данных SQL (postgres).

Прежде чем начать, давайте убедимся, что у нас установлен postgres:

psql --version
Войдите в полноэкранный режим Выйти из полноэкранного режима

Установка

В этом учебнике мы будем использовать sequelize с postgres. Поэтому давайте начнем с установки postgres и sequelize:

npm i pg sequelize
Войти в полноэкранный режим Выход из полноэкранного режима

Модели

После установки postgres создадим папку models.

Затем создадим два файла, файл index.js и нашу первую модель, назвав ее event.models.js.

Выполним следующие команды:

mkdir models
touch models/index.js
touch models/event.models.js
Войти в полноэкранный режим Выйти из полноэкранного режима

Сначала добавим следующий код в наш файл index.js:

const { Sequelize } = require('sequelize');

const settings = {
  host: 'localhost',
  dialect: 'postgres',
}

const sequelize = new Sequelize('DATABASE', 'USERNAME', 'PASSWORD', settings);

module.exports = sequelize;
Вход в полноэкранный режим Выйти из полноэкранного режима

Этот файл соединит нас с нашей базой данных postgres.

Замените ‘DATABASE’, ‘USERNAME’, ‘PASSWORD’ на свои собственные учетные данные postgres.

Теперь давайте добавим следующее в event.models.js:

const sequelize = require('.')
const { DataTypes } = require('sequelize');

const Event = sequelize.define('Events', {
  name: DataTypes.STRING,
  adultsOnly: DataTypes.BOOLEAN,
  attendees: DataTypes.INTEGER,
  description: DataTypes.STRING,
});

Event.sync();

module.exports = Event
Вход в полноэкранный режим Выход из полноэкранного режима

Итак, что мы только что сделали? Мы только что создали модель под названием Events и определили следующие схемы:

  1. Название — это будет строка, представляющая название события.
  2. Только для взрослых — это будет булево поле.
  3. Присутствующие — это будет число, представляющее количество участников.
  4. Описание — это также будет строковое поле.

Обновление контроллеров

Теперь мы должны изменить импорт в нашем файле event.controllers.js:

const events = require('../models/events.models');
Войти в полноэкранный режим Выход из полноэкранного режима

Запрос сообщения

Давайте обновим пост-запрос в нашем файле event.models.js.

Пост-запрос принимает тело запроса и создает объект в нашей базе данных postgres.

  • Успешный запрос возвращает ‘Событие создано!’,
  • Неудачный запрос возвращает ошибку со статусом 500.
const postEvent = async ctx => {
    try {
        const { name, adultsOnly, attendees, description } = ctx.request.body;

        await Event.create({ name, adultsOnly, attendees, description });

        ctx.body = 'Event Created!'
        ctx.status = 201;
    } catch (err) {
        ctx.status = 500;
        throw (err)
    }
};
Вход в полноэкранный режим Выход из полноэкранного режима

Попробуйте отправить элемент на следующую конечную точку на postman http://127.0.0.1:8000/post_event:

Перейдем к получению запроса!

Запрос на получение

В нашем файле event.models.js обновим контроллер getEvents.

Нам нужно обновить нашу функцию, чтобы сделать ее асинхронной и вернуть все элементы событий, хранящиеся в нашем postgres.

const getEvents = async ctx => {
    try {
        const foundEvents = await Event.findAll();
        ctx.body = foundEvents;
        ctx.status = 200;
    } catch (err) {
        ctx.body = err;
        ctx.status = 500;
    }
};
Вход в полноэкранный режим Выход из полноэкранного режима

Давайте попробуем выполнить запрос get к следующей конечной точке: http://127.0.0.1:8000/events_list.

Если все работает правильно, вы должны получить следующее:

[
    {
        "id": 1,
        "name": "test event",
        "adultsOnly": false,
        "attendees": 100,
        "description": "test event description",
        "createdAt": "TIME OF CREATION",
        "updatedAt": "TIME OF CREATION"
    }
]
Вход в полноэкранный режим Выход из полноэкранного режима

И это все!

Резюме

  • Мы добавили модели в наш проект.
  • Модель models/index.js соединяет нас с нашим сервером, и каждая модель будет вызывать индексный файл.
  • Мы подключили наши контроллеры к нашим моделям для запросов post и get.

Полный код этого руководства можно найти здесь.

Оцените статью
Procodings.ru
Добавить комментарий