Перейти к содержимому

Astro Content Loader API

Content Loader API позволяет загружать данные из любого источника (локального или удаленного) и интегрировать их в коллекции контента Astro.

Загрузчики Astro отвечают за наполнение коллекций данными. Встроенные загрузчики glob() и file() используются для работы с файловой системой, но вы можете создавать собственные загрузчики для API, баз данных или CMS.

Каждая коллекция должна иметь загрузчик, определенный в её схеме.

Создает записи из директорий с файлами. Поддерживает Markdown, MDX, JSON, YAML и TOML.

src/content.config.ts
import { defineCollection } from 'astro:content';
import { glob } from 'astro/loaders';
const blog = defineCollection({
loader: glob({ pattern: "**/*.md", base: "./src/data/blog" }),
});

Загружает данные из одного файла, содержащего массив объектов.

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,
});
}
},
};
}

Объект, передаваемый в load(), содержит:

  • store: интерфейс базы данных коллекции.
  • meta: хранилище для метаданных (например, токенов синхронизации).
  • logger: системный логгер Astro.
  • parseData: функция для валидации данных согласно схеме.
  • renderMarkdown: утилита для рендеринга Markdown-строк в HTML.