Nuxt 3 全栈开发:SSR、API 路由与模块生态

FreeGuideOnline 最新 2026-06-12

title: 我的第一篇文章 date: 2025-01-01

你好,Nuxt!

这是我的第一篇文章。

然后在前端页面通过 `queryContent()` 读取:
```vue
<template>
  <ul>
    <li v-for="post in data?.posts" :key="post._path">
      <NuxtLink :to="post._path">{{ post.title }}</NuxtLink>
    </li>
  </ul>
</template>

<script setup>
const { data } = await useAsyncData('blog', () => 
  queryContent('/blog').find()
)
</script>

2. @nuxt/image —— 自动优化图片

安装后,使用 <NuxtImg> 组件替代原生 <img>,即可实现按需缩放、格式转换、懒加载等:

<NuxtImg src="/hero.jpg" format="webp" quality="80" loading="lazy" />

Nuxt 会在构建时生成多种尺寸的优化版本,大幅提升页面加载速度。

3. @sidebase/nuxt-auth —— 快速集成身份认证

通过 npx nuxi module add sidebase/nuxt-auth 安装,简单配置即可添加 GitHub、Google 等社交登录,或邮箱密码认证。所有登录状态、会话管理都是自动处理的。

4. nuxt-graphql-client —— 对接 GraphQL API

让你的 Nuxt 项目直接消费 GraphQL 接口,并提供类型安全的查询组合式函数。

搜索更多模块

访问 https://nuxt.com/modules ,按热度、类型筛选,找到你需要的功能模块。


实战项目:全栈博客应用骨架

结合以上知识,我们可以快速搭建一个博客演示项目。

目录结构

my-nuxt-app/
├── content/
│   └── blog/
│       └── hello.md
├── pages/
│   ├── index.vue       # 首页: 展示文章列表
│   └── blog/
│       └── [slug].vue  # 文章详情动态页
├── server/
│   └── api/
│       └── posts.ts     # 自定义API(可选,与content结合)
└── app.vue

实现首页文章列表

pages/index.vue

<template>
  <div>
    <h1>我的博客</h1>
    <ul>
      <li v-for="post of data?.pages" :key="post._path">
        <NuxtLink :to="post._path">{{ post.title }}</NuxtLink>
      </li>
    </ul>
  </div>
</template>

<script setup lang="ts">
const { data } = await useAsyncData('home-posts', () =>
  queryContent('/blog').find()
)
</script>

实现文章详情页

pages/blog/[...slug].vue

<template>
  <article>
    <h1>{{ data?.page?.title }}</h1>
    <ContentRenderer :value="data?.page" />
  </article>
</template>

<script setup lang="ts">
const route = useRoute()
const { data } = await useAsyncData(`post-${route.path}`, () =>
  queryContent(route.path).findOne()
)
</script>