Программное использование
$content
доступен из @nuxt/content.
require('@nuxt/content')
должно произойти в хуках или внутренних методах Nuxt.export default { modules: [, '@nuxt/content' ], generate: { async ready () { const { $content } = require('@nuxt/content') const files = await $content().only(['slug']).fetch() console.log(files) } }}
Статическая генерация сайта
Начиная с версии 2.14+, nuxt generate
имеет интегрированный обходчик, который будет автоматически обходить все ваши ссылки и генерировать маршруты основываясь на них. Поэтому вам не нужно ничего делать для сканирования ваших динамических маршрутов.
Также, nuxt generate
будет пропускать этап сборки если код не был изменен используя кэш. Модуль content интегрируется с этим для игнорирования изменений внутри директории content/
. Другими словами, когда вы измените контент на вашем сайте выполните развертывание, то шаг сборки будет пропущен.
Прочитайте больше в этой статье.
При использовании Nuxt <= 2.12 nuxt generate
, вам нужно указать динамические маршруты в generate.routes, потому что Nuxt не знает какие маршруты нужно генерировать.
Пример
export default { modules: [, '@nuxt/content' ], generate: { async routes () { const { $content } = require('@nuxt/content') const files = await $content().only(['path']).fetch() return files.map(file => file.path === '/index' ? '/' : file.path) } }}
nuxt generate
, потому что это классно!Хуки
Этот модуль добавляет несколько хуков, которые вы можете использовать:
content:file:beforeInsert
Позволяет добавить данные в документ прежде, чем он будет сохранен.
Аргументы:
document
- Тип:
Object
- Свойства:
- Смотрите написание контента
- Тип:
Пример
Возьмем к примеру блог, мы используем file:beforeInsert
чтобы добавить readingTime
в документ, используя reading-time.
text
это контент markdown файла перед тем, как он будет преобразован в JSON AST, вы можете использовать его на этом этапе, но он не возвращается API.
export default { modules: [, '@nuxt/content' ], hooks: { 'content:file:beforeInsert': (document) => { if (document.extension === '.md') { const { time } = require('reading-time')(document.text) document.readingTime = time } } }}
Обработка горячей перезагрузки
nuxtServerInit
(если задано) и $nuxt.refresh()
для перезагрузки текущей страницы.::В случае, если вам нужно слушать событие, чтобы выполнить что-то еще, вам нужно слушать событие content:update
на стороне клиента, используя $nuxt.$on('content:update')
:export default function ({ store }) { // Только в режиме разработки if (process.dev) { window.onNuxtReady(($nuxt) => { $nuxt.$on('content:update', ({ event, path }) => { // Обновить категории в сторе store.dispatch('fetchCategories') }) }) }}
nuxt.config.js
:export default { plugins: [ '@/plugins/update.client.js' ]}
content/
, будет выполняться метод fetchCategories
.
Эта документация использует его и вы можете узнать больше, взглянув наplugins/categories.js.API
Этот модуль предоставляет API в разработке, поэтому вы можете легко увидеть JSON каждого каталога или файла, доступные на http://localhost:3000/_content/. Префикс_content
установлен по умолчанию и может быть изменен в параметре apiPrefix.Пример:-| content/---| articles/------| hello-world.md---| index.md---| settings.json
localhost:3000
будет выглядеть так:/_content/articles
: список файлов вcontent/articles/
/_content/articles/hello-world
: вернетhello-world.md
как JSON/_content/index
: вернетindex.md
как JSON/_content/settings
: вернетsettings.json
как JSON/_content
: списокindex
иsettings
GET
и POST
запросов, так что вы можете использовать параметры запроса: http://localhost:3000/_content/articles?only=title&only=description&limit=10.Начиная с v1.4.0, этот endpoint также поддерживает where
в параметрах запроса:- Все ключи, которые не принадлежат ни одному из ключей по умолчанию, будут применены к
where
http://localhost:3000/_content/articles?author=...
- Вы можете использовать
$operators
с_
:
http://localhost:3000/_content/articles?author_regex=...
Под капотом этот модуль использует LokiJS, вы можете взглянуть на примеры запросов.
- Вы можете использовать вложенные параметры:
http://localhost:3000/_content/products?categories.slug_contains=top
Вы можете узнать больше о конечных точках на lib/middleware.js.