/
MashkoA
/
web-nodejs
Обзор
Документация
Войти
/
MashkoA
/
web-nodejs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
backend/server.js
96 строк
3 KB
vSUS1w8OErscaPzljeOMKk86GKFCBmeQUlgjKJCmRenysib5Ll
lab12 obn
29 май 2026, 08:26
29 май 2026, 08:26
b547363
Код
Авторство
О чём код?
import Fastify from 'fastify'; import FastifyStatic from '@fastify/static'; import fastifyPostgres from '@fastify/postgres'; import dotenv from 'dotenv'; import path from 'path'; import { fileURLToPath } from 'url'; import fastifyJwt from '@fastify/jwt'; const __filename = fileURLToPath(import.meta.url); // __dirname теперь будет /app/backend/ (внутри контейнера) const __dirname = path.dirname(__filename); const fastify = Fastify({ logger: true }); // 1. Загружаем конфиг из .env.local dotenv.config({ path: '.env.local' }); // 2. Подключаем базу данных fastify.register(fastifyPostgres, { connectionString: process.env.DATABASE_URL, }); fastify.register(fastifyJwt, { secret: process.env.SECRET_KEY, sign: { expiresIn: '24h' // Токен действует 24 часа } }); // --- РЕГИСТРАЦИЯ СТАТИКИ --- fastify.register(FastifyStatic, { // Поднимаемся на один уровень из /app/backend/ в /app/ // и заходим в /app/public/ root: path.join(__dirname, '..', 'public'), index: 'index.html', wildcard: false, }); // --- РЕГИСТРАЦИЯ СТАТИКИ ДЛЯ ФАЙЛОВ ЛАБОРАТОРНЫХ РАБОТ --- fastify.register(FastifyStatic, { root: path.join(__dirname, '..', '..', 'web-nodejs-labs', 'public', 'files'), prefix: '/files/', decorateReply: false, }); // --- РЕГИСТРАЦИЯ РОУТЕРОВ ДЛЯ ЛАБОРАТОРНЫХ --- // Пример для ЛР №7 import lab7Routes from './src/routes/lab7/index.js'; fastify.register(lab7Routes, { prefix: '/api/lab7' }); // ЛР №8 import lab8Routes from './src/routes/lab8/index.js'; fastify.register(lab8Routes, { prefix: '/api/lab8' }); // ЛР №9 import lab9Routes from './src/routes/lab9/index.js'; fastify.register(lab9Routes, { prefix: '/api/lab9' }); // ЛР №10 import lab10Routes from './src/routes/lab10/index.js'; fastify.register(lab10Routes, { prefix: '/api/lab10' }); // ЛР №11 import lab11Routes from './src/routes/lab11/index.js'; fastify.register(lab11Routes, { prefix: '/api/lab11' }); // ЛР №12 import lab12Routes from './src/routes/lab12/index.js'; fastify.register(lab12Routes, { prefix: '/api/lab12' }); // Здесь добавляем новые строки для каждой лабы // -- Декоратор аутентификации: проверка токена перед доступом к защищённым роутам fastify.decorate('authenticate', async function (request, reply) { try { // jwtVerify сам достанет токен из заголовка Authorization: Bearer <token> await request.jwtVerify(); // После этого в request.user будет payload токена (id, login, role) // Например: { id: 1, login: 'admin', role: 'admin', iat: ..., exp: ... } } catch (err) { reply.code(401).send({ error: 'Unauthorized' }); } }); // --- ЗАПУСК СЕРВЕРА --- const start = async () => { try { await fastify.listen({ port: 3000, host: '0.0.0.0' }); } catch (err) { fastify.log.error(err); process.exit(1); } }; start();