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

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

В этой части мы начнем с того места, на котором остановились в первой части, поэтому если вы хотите следовать дальше, клонируйте этот репозиторий, но вместо него создайте базу данных NoSQL. Для этого мы будем использовать MongoDB.

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

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

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

Если она установлена, давайте продолжим.

Установка

MongoDB — нереляционная база данных, то есть каждый объект, который мы помещаем в нашу базу данных, не обязательно должен иметь одинаковые ключи. Но mongoose позволяет нам устанавливать схемы, что делает наши типы более строгими.

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

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

Модели

После установки Mongoose создадим папку models и нашу первую модель, назвав ее event.models.js.

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

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

Эти команды создадут папку с двумя файлами index.js и event.models.js.

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

const mongoose = require('mongoose');

const settings = {
    useNewUrlParser: true,
    useUnifiedTopology: true 
}

mongoose.connect("mongodb://localhost:27017/database", settings);

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

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

Создайте нашу первую модель

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

const { Schema, model } = require('.');

const eventsSchema = new Schema({
    attendees: Number,
    name: String,
    adultsOnly: Boolean,
    description: String,
    organizers: String
});

const Events = model('Events', eventsSchema);

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

Это типы, которые мы только что создали:

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

Контроллеры

Импортируем только что созданную модель в наш файл контроллеров.

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

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

Теперь давайте обновим наш пост-запрос в файле event.controllers.js.

Запрос post принимает тело запроса и создает объект в нашей базе данных mongo.

  • Успешный запрос вернет ‘Событие создано!’,
  • Неудачный запрос вернет ошибку со статусом 500.
const postEvent = async ctx => {
    try {
        await Events.create(ctx.request.body);
        ctx.body = 'Event Created!'
        ctx.status = 201;
    } catch (e) {
        console.log(err)
        ctx.status = 500
        throw(err)
    }
};
Вход в полноэкранный режим Выход из полноэкранного режима

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

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

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

Давайте также обновим наш get запрос в нашем event.controllers.js.

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

const getEvents = async ctx => {
    try {
        const results = await Events.find()
        ctx.body = results
        ctx.status = 200
    } catch (err) {
        console.log(err)
        ctx.status = 500
        throw(err)
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

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

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

[
    {
        "_id": "RANDOM GENERATED ID",
        "attendees": 100,
        "name": "test event",
        "adultsOnly": false,
        "description": "test event description",
        "__v": 0
    }
]
Вход в полноэкранный режим Выйти из полноэкранного режима

И это все, что она написала! База данных mongoDB с Koa Js, быстро и безболезненно. Вот репозиторий.

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