Маршруты
Лень — двигатель прогресса.
Если посмотреть гайды в интернете, то вы увидите вбитые ручками маршруты для api. Не важно, fastify или express. Везде примерно одно и то же:
fastify.get('/', options, async function (request, reply) {
var data = await getData()
var processed = await processData(data)
return processed
})
Хорошо, ничего плохого в этом нет. У вас может быть пару таких зарегистрированных маршрутов. Но что делать, если у вас их много? Если у вас крупный проект, в котором минимально хочется прыгать из файла в файл? Моя лень взяла вверх, а опыт работы с Next спровоцировал создать простой в реализации, но очень удобный и мощный пакет для fastify. Этот пакет реализует роутинг на уровне файловой системы, что позволяет забыть о ручном роутинге и делает это, основываясь на папках и файлах, которые будут создаваться в корневой директории контроллеров. На самом деле, данная ситуация напоминает посты в группах для программистов: "Потратил 1 час для автоматизации единоразовой задачи, которая руками делается за 10 минут". Открываете консоль и пишете: NPM:
npm i -s fastify-easy-route
YARN:
yarn add fastify-easy-route
После установки открываем index.js и добавляем одну строчку кода сразу над функцией запуска сервера:
fastify.register(require('fastify-easy-route'));
Наш вручную прописанный маршрут удаляем, чтоб получилось так:
const fastify = require('fastify')({ logger: true })
fastify.register(require('fastify-formbody'));
// Добавляем плагин
fastify.register(require('fastify-easy-route'));
// Функция запуска сервера
const start = () => {
try {
fastify.listen(process.env.PORT, process.env.IP, (error) => {
if (error) {
fastify.log.error(error);
process.exit(1);
}
console.log(`Server listening on http://127.0.0.1:${process.env.PORT}`)
})
}
catch (error) {
fastify.log.error(error);
process.exit(1)
}
}
// Запускаем сервер
start()
Так мы научили наш api автоматически регистрировать маршруты без собственного вмешательства. Чтоб проверить работоспособность, нам нужно разобраться, что же такое контроллер, но это тема следующего раздела. Поэтому не будем вникать, а просто создадим в ранее подготовленной папке controllers файл index.js с таким содержимым:
module.exports = {
method: "GET",
async execute(fastify, request, reply) {
try {
reply
.code(200)
.header('Content-Type', 'application/json; charset=utf-8')
.send({ message: "I'm super api" });
}
catch (error) {
reply
.code(500)
.header('Content-Type', 'application/json; charset=utf-8')
.send({ message: "This is very bad =(" });
}
}
}
Запустим сервер и зайдём на наш http://127.0.0.1:18301. В ответ увидим I'm super api
Last updated
Was this helpful?