База данных
Я не буду учить вас пользоваться базами данных. Но хочу показать, как я работаю с 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?