跳至主要內容

Nuxt

俞文健大约 1 分钟

目录

├── .nuxt                  nuxt dev 创建的应用程序
├── .output                nuxt build 创建的生产文件
├── assets                 构建工具处理的资源
├── components             组件
├── composables            组合式函数
├── layouts                布局
├── middleware             中间件
├── pages                  页面
├── plugins                插件
├── public                 静态资源
├── server                 服务器
├── utils                  工具函数
├── .env                   环境变量
├── app.vue                主文件
├── app.config.ts          应用配置
├── nuxt.config.ts         脚手架配置
├── package.json           依赖管理
└── tsconfig.json          TS 配置

布局

NuxtLayout

显示 layouts 中的布局。

app.vue
<!-- 默认显示 `layouts/default.vue` 布局 -->
<NuxtLayout />

<!-- 自定义显示 `layouts/custom.vue` 布局 -->
<NuxtLayout name="custom" />

页面

NuxtPage

显示 pages 中的页面。

layouts/default.vue
<template>
  <Header />
  <NuxtPage />
  <Footer />
</template>

definePageMeta

定义页面的 meta 数据。

pages/login.vue
<script setup lang="ts">
  definePageMeta({
    isHideHeader: true
  })
</script>

请求

useFetch

请求数据。

utils/request.ts
import type { UseFetchOptions } from "nuxt/app"

export default async function request<T>(
  url: string,
  options: UseFetchOptions<ResponseResult<T>>
): Promise<T> {
  // 设置请求头
  // options.headers = ...
  
  const { data, pending, error, refresh } = await useFetch(url, options)
  
  return data.value && data.value.code === 200
    ? data.value.data
    : Promise.reject(error.value || data.value!.message)
}

服务

defineEventHandler

注册 API 模拟数据。

server/api/banners.ts
export default defineEventHandler(() => {
  return {
    code: 200,
    data: [
      { id: 1, imageUrl: "/images/banner1.jpg" },
      { id: 2, imageUrl: "/images/banner2.jpg" },
      { id: 3, imageUrl: "/images/banner3.jpg" }
    ],
    message: "ok",
    success: true
  }
})