Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Рендеринг по запросу

По умолчанию Astro собирает все страницы заранее. Рендеринг по запросу (on-demand rendering, его ещё называют SSR) означает, что страница формируется на сервере каждый раз, когда её открывают. Это нужно для поиска, личных данных посетителя, форм. Для такого режима нужен адаптер — пакет, который запускает собранный сайт на конкретной платформе: в Node.js, на Netlify, Vercel или Cloudflare.

Адаптер Node.js

npx astro add node

Команда установит @astrojs/node и допишет его в astro.config.mjs:

// astro.config.mjs
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
 
export default defineConfig({
  adapter: node({ mode: 'standalone' }),
});

Режим standalone значит, что сборка запускается как самостоятельный сервер. Все страницы по-прежнему собираются заранее — адаптер лишь позволяет отдельным страницам отказаться от этого.

Страница по запросу

Создайте страницу поиска src/pages/search.astro:

---
export const prerender = false;
 
const query = Astro.url.searchParams.get('q') ?? '';
---
 
<h1>Поиск</h1>
<form>
  <input name="q" value={query} />
  <button>Найти</button>
</form>
{query && <p>Вы искали: {query}</p>}

Строка export const prerender = false отключает предварительную сборку этой страницы. Откройте /search?q=astro — на странице будет «Вы искали: astro». Измените адрес, и ответ изменится: страница считается заново для каждого запроса.

Что доступно на сервере

СвойствоЧто в нём
Astro.urlПолный адрес запроса, включая параметры после ?
Astro.paramsПараметры динамического маршрута
Astro.requestОбъект запроса: метод, заголовки, тело
Astro.cookiesЧтение и установка cookies
Astro.redirect('/login')Возвращает перенаправление на другой адрес

Например, Astro.cookies.get('theme')?.value читает cookie темы оформления, а return Astro.redirect('/') во фронтматтере отправляет посетителя на главную.

Весь сайт по запросу

Если таких страниц большинство, поменяйте режим по умолчанию: output: 'server' в defineConfig. Тогда все страницы формируются по запросу, а те, что нужно собрать заранее, помечают export const prerender = true.

НастройкаСтраницы по умолчанию
без output (static)Собираются заранее
output: 'server'Формируются по запросу

Частая ошибка

Пишут export const prerender = false, но не подключают адаптер. Сборка останавливается с ошибкой о том, что для серверных страниц нужен адаптер. Сначала выполните npx astro add с нужной платформой, затем отключайте предварительную сборку страниц.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.