配置环境变量
1、创建 .env 文件(列:.env.xxx)放置根目录下,我这里是配置了三个环境,对应运行环境 .env.development、生产环境 .env.production、测试环境 .env.staging

2、在 nuxt.config.ts 文件里面添加以下配置,VUE_APP_BASE_API 对应自己在第一步环境里面配置的参数
export default defineNuxtConfig({
runtimeConfig: {
public: {
VUE_APP_BASE_API: process.env.VUE_APP_BASE_API
}
},
})
3、在 package.json 文件里面添加以下配置,执行对应的命令就可以使用对应的环境变量啦
{
"scripts": {
"dev": "nuxt dev --dotenv .env.development",
"serve": "nuxt dev --dotenv .env.development",
"build": "nuxt build --dotenv .env.production",
"build:stage": "nuxt build --dotenv .env.staging",
"build:prod": "nuxt build --dotenv .env.production",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
}
接口请求封装
1、在src文件夹下新建一个API文件夹,用来存放封装所有的API,目录接口如以下

2、在api文件夹下新建 index.ts 文件,将API文件夹下的按模块区分的modules全导出
const modulesFiles: Record<string, any> = import.meta.glob("./modules/**/*.ts", { eager: true })
let modules: Record<string, any> = {}
for (const modulePath in modulesFiles) {
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, "$1").split("/").pop()
modules[moduleName || ''] = modulesFiles[modulePath].default
}
export default modules
3、在api文件夹下新建 request.ts 文件,封装 fetch 请求,处理相关的响应数据
import type { NitroFetchRequest } from 'nitropack'
import type { FetchOptions } from 'ofetch'
import { ElMessage } from 'element-plus'
interface Params {
url: NitroFetchRequest,
method?: 'post' | 'get',
opts: FetchOptions<any>
}
export default async function $request({url, method = 'post', opts}: Params) {
const config = useRuntimeConfig()
const { data } = await useFetch(url, {
method,
baseURL: config.public.VUE_APP_BASE_API,
onRequest({ request, options }) {
options.headers = { ...options.headers, authorization: 'xxx' }
options.body = opts
},
onResponse({ response }) {
if (response._data.status == 200) {
return response._data
} else {
ElMessage({
message: '请求异常,请联系管理员处理!',
type: 'error',
})
}
},
onRequestError({ request, options, error }) {
console.warn('request error', error)
ElMessage({
message: '请求错误,请联系管理员处理!',
type: 'error',
})
},
onResponseError({ request, options, response }) {
console.warn('request error', response)
ElMessage({
message: '响应错误,请联系管理员处理!',
type: 'error',
})
}
})
return data.value
}
4、在api/modules文件夹下新建对应的模块文件,统一管理接口
import $request from "../request"
export default {
userLogin: (options: any = {}) => {
return $request({ url: `/user/login`, opts: options })
},
}
5、在composables文件夹下新建 useApi.ts 文件,将API挂载在全局
import api from '~/api/index'
export const useApi = () => api
6、页面上使用
const { data } = await useApi().login.userLogin()