Этот модуль глобально внедряет экземпляр $content
, это значит, что вы можете получить доступ к this.$content
из любого места. В плагинах, asyncData, fetch, nuxtServerInit и Middleware, вы можете получить к нему доступ из context.$content
.
Методы
$content(путь, параметры?)
путь
- Тип:
String
- По умолчанию:
/
- Тип:
параметры
- Тип:
Object
- По умолчанию:
{}
- Версия: v1.3.0
- Тип:
параметры.deep
- Тип:
Boolean
- По умолчанию:
false
- Версия: v1.3.0
- Получение файлов из поддиректорий
- Тип:
параметры.text
- Тип:
Boolean
- По умолчанию:
false
- Версия: v2.0.0
- Возвращает оригинальное содержание markdown в переменной
text
- Тип:
- Возвращает последовательность цепочек
Вы можете передать несколько аргументов:
$content('articles', params.slug)
будет преобразовано в/articles/${params.slug}
путь
может быть файлом или директорией. Если путь
это файл, то fetch()
вернет Object
, если директория, то вернет Array
.
Все приведенные ниже методы могут быть объединены в цепочку и возвращать последовательность цепочек, кроме fetch
, который возвращает Promise
.
only(ключи)
ключи
- Тип:
Array
|String
обязательное
- Тип:
Выберите подмножество полей.
const { title } = await this.$content('article-1').only(['title']).fetch()
without(ключи)
keys
- Тип:
Array
|String
обязательное
- Тип:
Исключите подмножество полей.
const { title, ...propsWithoutBody } = await this.$content('article-1').without(['body']).fetch()
where(запрос)
запрос
- Тип:
Object
обязательное
- Тип:
Отфильтровывает результаты по запросу.
Где запросы основаны на подмножестве синтаксиса запросов mongoDB, примеры: $eq
, $ne
, $gt
, $gte
, $lt
, $lte
, $in
и т.д.
// неявно (предполагает оператор $eq)const articles = await this.$content('articles').where({ title: 'Home' }).fetch()// явно $eqconst articles = await this.$content('articles').where({ title: { $eq: 'Home' } }).fetch()// $gtconst articles = await this.$content('articles').where({ age: { $gt: 18 } }).fetch()// $inconst articles = await this.$content('articles').where({ name: { $in: ['odin', 'thor'] } }).fetch()
Для фильтрации в объектах и массивах вам нужно включить nestedProperties, взгляните на конфигурацию.
const products = await this.$content('products').where({ 'categories.slug': { $contains: 'top' } }).fetch()const products = await this.$content('products').where({ 'categories.slug': { $contains: ['top', 'woman'] } }).fetch()
Этот модуль использует LokiJS под капотом, вы можете взглянуть на примеры запросов.
sortBy(ключ, направление)
ключ
- Тип:
String
обязательное
- Тип:
направление
- Тип:
String
- Значение:
'asc'
или'desc'
- По умолчанию:
'asc'
- Тип:
Выполняет сортировку значений по ключу.
const articles = await this.$content('articles').sortBy('title').fetch()
Может быть объединен в цепочку для сортировки по нескольким полям.
limit(кол-во)
кол-во
- Тип:
String
|Number
обязательное
- Тип:
Ограничивает количество результатов.
// получить только 5 статейconst articles = await this.$content('articles').limit(5).fetch()
skip(кол-во)
кол-во
- Тип:
String
|Number
обязательное
- Тип:
Пропускает нужное количество результатов.
// получить следующие 5 статейconst articles = await this.$content('articles').skip(5).limit(5).fetch()
search(поле, значение)
поле
- Тип:
String
обязательное
- Тип:
значение
- Тип:
String
- Тип:
Выполняет полнотекстовый поиск по полю. значение
необязательное, в этом случае поле
является значением
и поиск будет выполняться по всем определенным полнотекстовым полям поиска.
Поля, по которым вы хотите искать, должны быть определены в опциях, чтобы их можно было проиндексировать, взгляните на конфигурацию.
// Поиск по полю titleconst articles = await this.$content('articles').search('title', 'welcome').fetch()// Поиск по всем определенным полямconst articles = await this.$content('articles').search('welcome').fetch()
surround(ярлык, настройки)
ярлык
- Тип:
String
обязательное
- Тип:
настройки
- Тип:
Object
- По умолчанию:
{ before: 1, after: 1}
- Тип:
Получает предыдущий и следующий результаты по конкретному ярлыку.
Вы всегда получите массив фиксированной длины, заполненный документами или null
.
const [prev, next] = await this.$content('articles') .only(['title', 'path']) .sortBy('date') .where({ isArchived: false }) .surround('article-2') .fetch()// Возвращает[ { title: 'Article 1', path: 'article-1' }, null // article-3 не существует]
search
,limit
иskip
неэффективны при использовании этого метода.
fetch()
- Возвращает:
Promise<Object>
|Promise<Array>
Завершает последовательность цепочек и собирает данные.
Пример
const articles = await this.$content('articles') .only(['title', 'date', 'authors']) .sortBy('date', 'asc') .limit(5) .skip(10) .where({ tags: 'testing', isArchived: false, date: { $gt: new Date(2020) }, rating: { $gte: 3 } }) .search('welcome') .fetch()
Вы можете проверить, как использовать API контента в разработке.