База данных

Я не буду учить вас пользоваться базами данных. Но хочу показать, как я работаю с mysql в этом api. Да-да не Mongo, не PostgreSQL, а MySQL. Потому что я так хочу =) У меня нет каких-то особых проблем с использованием mysql, так почему тогда я должен переходить на что-то другое?! Только чистая MySQL, никаких ORM. Если вы хотите... пишите на ORM, используйте другие бд и тд. Дело в том, что для комфортного использования чего-либо в fastify если плагины. Вот и для MySQL я написал маленький плагин который делает... ничего =) Просто mysql.query будет доступен нам из fastify.mysql.query("",[]); Вместо постоянного импорта mysql в каждый файл контроллеров. Если вам это нужно, то данная глава – для вас. Если вы умеете пользоваться MySQL, знаете, как избежать sql инъекции, и вам не нужна mysql в виде плагина... то эту и слудующую главу можно пропустить. Начнём с создания плагина для fastify. Ранее мы скачивали пакет для создания плагинов, но если вы его пропустили, то вот: NPM:

npm i -s fastify-plugin

YARN:

yarn add fastify-cors

Также нам нужна либа для общения бэка с БД: NPM:

npm i -s mysql2

YARN:

yarn add mysql2

Далее откроем папку module и создадим там файл mysql.js:

'use strict'

const fp = require('fastify-plugin')
const MySQL = require('mysql2')

const { createPool } = MySQL

const fastifyMySQL = (fastify, options, next) => {
    let transporter = null

    try {
        transporter = createPool({
            host: process.env.DB_HOST,
            user: process.env.DB_NAME,
            database: process.env.DB_DATABASE,
            password: process.env.DB_PASSWORD,
            charset: 'utf8mb4',
            waitForConnections: true,
            connectionLimit: 100,
            queueLimit: 0
        }).promise();
    } catch (err) {
        return next(err)
    }

    fastify
        .decorate('mysql', transporter)
        .addHook('onClose', close)

    next()
}

const close = (fastify, done) => {
    fastify.mysql.close(done)
}

module.exports = fp(fastifyMySQL, {
    fastify: '>=2.0.0',
    name: 'fastify-mysql2'
})

В ENV добавляем все требуемые параметры и дальше зарегистрируем в fastify наш плагин:

fastify.register(require('mysql'));

На этом всё. Как использовать этот плагин, как избежать инъекции, написано в следующей главе.

Last updated

Was this helpful?