Fresh — это современный веб-фреймворк на базе Deno, который обеспечивает высокую производительность и минимальный размер клиентского JavaScript. Помимо базовой структуры проекта, Fresh предлагает ряд встроенных утилит, ускоряющих разработку, упрощающих работу с маршрутизацией, рендерингом и серверной логикой.
Fresh использует файловую маршрутизацию, где каждая страница
соответствует файлу в каталоге routes. Для более гибкой
работы с запросами предоставляются следующие инструменты:
Объект Context В каждом маршруте
доступен объект ctx с ключевыми свойствами:
request — объект запроса (Request),
поддерживает чтение тела, заголовков и параметров.params — объект с динамическими сегментами маршрута
([id].tsx).render — функция для рендеринга страницы с передачей
данных в компонент.export const handler: Handlers = {
GET(ctx) {
const { id } = ctx.params;
return ctx.render({ id });
}
};
Response.redirect(url, status) позволяет возвращать
перенаправления. Создание JSON-ответов осуществляется через
Response.json(data):return Response.json({ success: true });
Fresh ориентирован на SSR по умолчанию. Для работы с компонентами используются:
ctx.render:export default function Page({ data }: { data: { id: string } }) {
return <h1>ID: {data.id}</h1>;
}
ctx.renderNotFound() Позволяет
вернуть 404 без необходимости вручную создавать ответ:if (!user) {
return ctx.renderNotFound();
}
Island компоненты Механизм
изолированных интерактивных блоков, которые загружаются на клиенте
только при необходимости, минимизируя объем JS.import Counter from "../islands/Counter.tsx";
export default function Page() {
return <Counter initial={0} />;
}
Fresh автоматически обрабатывает статические файлы из каталога
public. Утилиты для работы с ними включают:
import logoUrl from "../public/logo.png";
<img src={logoUrl} alt="Logo" />;
std/media_types:import { contentType } from "https://deno.land/std/media_types/mod.ts";
const type = contentType("example.png"); // image/png
Fresh не использует глобальный state management по умолчанию, но предоставляет простые способы кэширования:
Cache-Control:return new Response(html, {
headers: {
"Cache-Control": "max-age=3600",
"Content-Type": "text/html",
},
});
Deno.env,
Deno.readTextFile, Deno.writeTextFile.Fresh интегрирован с экосистемой Deno, что позволяет использовать множество стандартных модулей:
import { join, dirname } from "https://deno.land/std/path/mod.ts";
const fullPath = join(dirname(import.meta.url), "data.json");
import { parse } from "https://deno.land/std/flags/mod.ts";
const args = parse(Deno.args);
import { format } from "https://deno.land/std/datetime/mod.ts";
const now = format(new Date(), "yyyy-MM-dd HH:mm:ss");
Fresh позволяет использовать серверные утилиты для генерации HTML, JSON и других форматов данных:
const html = `<h1>${escape(data.title)}</h1>`;
return new Response(html, { headers: { "Content-Type": "text/html" } });
return Response.json({ message: "Hello World" });
const file = await Deno.readFile("./public/file.pdf");
return new Response(file, { headers: { "Content-Type": "application/pdf" } });
Fresh поддерживает стандартное логирование через console
и расширенные возможности через модуль std/log:
import * as log from "https://deno.land/std/log/mod.ts";
await log.setup({
handlers: {
console: new log.handlers.ConsoleHandler("DEBUG"),
},
loggers: {
default: {
level: "DEBUG",
handlers: ["console"],
},
},
});
log.info("Server started");
Эти утилиты помогают контролировать поведение приложения на сервере и быстро выявлять ошибки без подключения сторонних инструментов.
Fresh сочетает минимализм и мощь встроенных утилит, обеспечивая быструю разработку, высокую производительность и гибкую архитектуру для любых веб-проектов на Deno и Preact.