Статика

Бывает случаи когда нам нужно раздавать статику (картинки, видео, документы и т.д.). Это можно сделать как через nginx, так и средствами нашего api. Покажу как реализовать статику из файловой системы, но так же можно реализовать, к примеру, выгрузку из бд. Для начала нам нужны два пакета:

NPM:

npm i -s fastify-static path

YARN:

yarn add fastify-static path

После чего добавляем fastify-static в плагины fastify: Доступ к статике будет по такому url: https://example.com/public/test.jpg

const path = require('path');

fastify.register(require('fastify-static'), {
    root: path.join(__dirname, 'public'),
    prefix: '/public/',
})

root – расположение папки со статикой prefix – префикс по которому эта статика будет доступна

Так же можно сделать контроллер, который будет выдавать эту статику.

Создаём папку data и в ней [filename].js. Доступ к статике будет по такому url: https://example.com/data/test.jpg:

module.exports = {
    method: "GET",
    auth: false,
    admin: false,
    config: {},
    async execute(fastify, request, reply) {
        try {
            let a = request.params.filename;
            return reply.sendFile(a)
        }
        catch (error) {
            console.log(err);
            return fastify.response.All(500, {}, reply);
        }
    }
}

В итоге мы получим всё то же самое, но в случае с контроллером мы можем управлять доступами и брать файлы из бд или любого другого места.

Last updated

Was this helpful?