您正在阅读 Nuxt 内容 V1 文档。阅读最新版本

入门

获取内容

了解如何在 Nuxt.js 项目中使用 $content 获取静态内容。

此模块全局注入 $content 实例,这意味着您可以使用 this.$content 在任何地方访问它。对于插件、asyncData、nuxtServerInit 和 Middleware,您可以从 context.$content 访问它。

方法

$content(path, options?)

  • 路径
    • 类型: string
    • 默认值: /
  • 选项
    • 类型: object
    • 默认值: {}
    • 版本: >= v1.3.0
  • options.deep
    • 类型: boolean
    • 默认值: false
    • 版本: >= v1.3.0
    • 从子目录获取文件
  • options.text
    • 类型: boolean
    • 默认值: false
    • 版本: >= v1.4.0
    • text 变量中返回原始的 Markdown 内容
  • 返回一个链式序列

您也可以给出多个参数: $content('articles', params.slug) 将被转换为 /articles/${params.slug}

path 可以是文件或目录。如果 path 是文件,fetch() 将返回一个 object,如果它是目录,它将返回一个 Array

以下所有方法都可以链接并返回一个链式序列,除了 fetch 返回一个 Promise

only(keys)

  • 密钥
    • 类型: 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(query)

  • 查询
    • 类型: object
    • 必需

通过查询过滤结果。

Where 查询基于 mongo 查询语法的子集,它处理例如: $eq, $ne, $gt, $gte, $lt, $lte, $in, ...

// implicit (assumes $eq operator)
const articles = await this.$content('articles').where({ title: 'Home' }).fetch()
// explicit $eq
const articles = await this.$content('articles').where({ title: { $eq: 'Home' } }).fetch()

// $gt
const articles = await this.$content('articles').where({ age: { $gt: 18 } }).fetch()
// $lte
const articles = await this.$content('articles').where({ createdDateTime: { $lte: new Date().toISOString() } }).fetch()
// $in
const 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(key, direction)

  • 密钥
    • 类型: string
    • 必需
  • 方向
    • 类型: string
    • 值: 'asc''desc'
    • 默认值: 'asc'

按密钥排序结果。

const articles = await this.$content('articles').sortBy('title').fetch()

可以多次链接以按多个字段排序。

sortBy 方法执行 **区分大小写** 的排序,目前不可配置。

如果您需要不区分大小写的排序,请查看 此代码片段,了解如何解决此问题。

limit(n)

  • n
    • 类型: string | number
    • 必需

限制结果数量。

// fetch only 5 articles
const articles = await this.$content('articles').limit(5).fetch()

skip(n)

  • n
    • 类型: string | number
    • 必需

跳过结果。

// fetch the next 5 articles
const articles = await this.$content('articles').skip(5).limit(5).fetch()

search(field, value)

  • 字段
    • 类型: string
    • 必需
    • 类型: string

对字段执行全文搜索。 value 是可选的,在这种情况下,fieldvalue,并且将在所有定义的全文搜索字段上执行搜索。

您要搜索的字段必须在选项中定义才能被索引,请参见 配置

使用空字符串作为参数将跳过搜索。

// Search on field title
const articles = await this.$content('articles').search('title', 'welcome').fetch()
// Search on all pre-defined fields
const articles = await this.$content('articles').search('welcome').fetch()
// Search will be skipped if the search string is empty
const articles = await this.$content('articles').search('').fetch()

查看 此代码片段,了解如何在您的应用程序中实现搜索

surround(slugOrPath, options)

  • slugOrPath
    • 类型: string
    • 必需
  • 选项
    • 类型: object
    • 默认值: { before: 1, after: 1}

获取围绕特定 slug 或路径的之前和之后的结果。

您将始终获得一个固定长度的数组,其中包含匹配的文档或 null

const [prev, next] = await this.$content('articles')
  .only(['title', 'path'])
  .sortBy('date')
  .where({ isArchived: false })
  .surround('article-2')
  .fetch()

// Returns
[
  {
    title: 'Article 1',
    path: 'article-1'
  },
  null // no article-3 here
]

search, limitskip 在使用此方法时无效。

基于 path 获取结果仅在 v1.12.0 及更高版本中支持

查看 此代码片段,了解如何在您的应用程序中实现之前和之后的链接

fetch()

  • 返回: Promise<object> | Promise<Array>

结束链式序列并收集数据。

catch()

检查内容目录中是否存在 .md 文件。

它应该插入在 fetch() 之后。

示例

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-03-31') },
    rating: { $gte: 3 }
  })
  .search('welcome')
  .fetch()
  .catch((err) => {
     error({ statusCode: 404, message: 'Page not found' })
  })

您可以查看如何在开发中使用 内容 API