Astro Content Loader API
Content Loader API позволяет загружать данные из любого источника (локального или удаленного) и интегрировать их в коллекции контента Astro.
Что такое загрузчик (loader)?
Заголовок раздела «Что такое загрузчик (loader)?»Загрузчики Astro отвечают за наполнение коллекций данными. Встроенные загрузчики glob() и file() используются для работы с файловой системой, но вы можете создавать собственные загрузчики для API, баз данных или CMS.
Каждая коллекция должна иметь загрузчик, определенный в её схеме.
Встроенные загрузчики
Заголовок раздела «Встроенные загрузчики»Загрузчик glob()
Заголовок раздела «Загрузчик glob()»Создает записи из директорий с файлами. Поддерживает Markdown, MDX, JSON, YAML и TOML.
import { defineCollection } from 'astro:content';import { glob } from 'astro/loaders';
const blog = defineCollection({ loader: glob({ pattern: "**/*.md", base: "./src/data/blog" }),});Загрузчик file()
Заголовок раздела «Загрузчик file()»Загружает данные из одного файла, содержащего массив объектов.
const authors = defineCollection({ loader: file("src/data/authors.json"),});Создание кастомного загрузчика
Заголовок раздела «Создание кастомного загрузчика»Вы можете описать загрузчик как объект с методом load(), который вызывается во время сборки.
import type { Loader, LoaderContext } from 'astro/loaders';
export function myLoader(options: { url: string }): Loader { return { name: "my-loader", load: async (context: LoaderContext): Promise<void> => { const response = await fetch(options.url); const data = await response.json();
// Очистка и наполнение хранилища context.store.clear(); for (const item of data) { context.store.set({ id: item.id, data: item, }); } }, };}LoaderContext
Заголовок раздела «LoaderContext»Объект, передаваемый в load(), содержит:
store: интерфейс базы данных коллекции.meta: хранилище для метаданных (например, токенов синхронизации).logger: системный логгер Astro.parseData: функция для валидации данных согласно схеме.renderMarkdown: утилита для рендеринга Markdown-строк в HTML.