Рендеринг по запросу
По умолчанию 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 с нужной платформой, затем отключайте предварительную сборку страниц.