import fastify from 'fastify' import dotenv from 'dotenv' import path from 'path' // getting .env dotenv.config({ path: path.join(path.resolve(), '/../../.env') }) // create server const server = fastify() /** * add liquidjs * * */ import { Liquid } from 'liquidjs' import view from '@fastify/view' const engine = new Liquid({ root: path.join(path.resolve(), '/../frontend/views'), extname: '.liquid', }) server.register(view, { engine: { liquid: engine } }) /** * adding preHandler * * */ import SettingsStore from './stores/Settings.js' // getting options from directus add to all views server.addHook('preHandler', async function (request, response) { const settingsStore = new SettingsStore() const settings = await settingsStore.find() response.locals = { settings: settings } }) // check url for paged server.addHook('onRequest', async function (request, response) { const url = request.url let pathname = url.split('/') pathname.shift() // default value for paged let paged = 1 // check if pathname has values if (pathname.length > 0) { // try to get number const result = Number(pathname[pathname.length - 1]) // is result is integer if (Number.isInteger(result)) { paged = result // remove last element pathname.pop() // @TODO change, thats looks strange if (pathname.length > 0) { request.raw.url = pathname.join('/') } else { request.raw.url = '/' } } } // adding to response response.locals = { paged : paged } }) /** * routing * * */ import commentHttp from './http/api/comment.js' import notfoundHttp from './http/notfound.js' import postHttp from './http/post.js' // page and static has always the last routes, if no route before match, it try get a page import sitemapHttp from './http/sitemap.js' import pageHttp from './http/page.js' import staticHttp from './http/static.js' server .register(commentHttp, { 'prefix': '/api/comment/v1/' }) .register(notfoundHttp) .register(postHttp, { 'prefix': '/blog' }) .register(sitemapHttp) .register(pageHttp) .register(staticHttp) export default server