Nuxt Content

Adding Nuxt Content to a Nuxt 3 project

Add Nuxt Content module

npm install @nuxt/content

1. Add file

content.config.ts

import { defineCollection, defineContentConfig, z } from '@nuxt/content';

export default defineContentConfig({
  collections: {
    blog: defineCollection({
      type: 'page',
      source: 'blog/*.md',
      schema: z.object({
        date: z.string()
      })
    })
  }
});

Add template pages

pages/blog/...slug.vue index.vue

// pages/blog/[...slug].vue
<script lang="ts" setup>
const route = useRoute()
const { data: page } = await useAsyncData(route.path, () => {
  return queryCollection('blog').path(route.path).first()
})
</script>

<template>
  <main class="mt-20 py-24">
    <ContentRenderer v-if="page" :value="page" />
  </main>
</template>
// pages/blog/index.vue
<template>
    <div>
      <h1>Blog</h1>
      <ul>
        <li v-for="post in posts" :key="post.id">
          <NuxtLink :to="post.path">{{ post.title }}</NuxtLink>
        </li>
      </ul>
    </div>
  </template>

  <script setup>
  const { data: posts } = await useAsyncData('blog', () => {
    return queryCollection('blog').all()
  })
  </script>

Ensure correct content structure

content/blog/index.md post1.md post2.md

---
title: Hello
---

# Foo

This is Foo blog post.