news 2026/4/3 4:45:38

nuxt3模块化API架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nuxt3模块化API架构

nuxt3模块化API架构

composables/useApi.js(核心 composable)↓ 统一底层 api/modules/ ├── projects.js → 基于 useApi()实现 ├── categories.js → 基于 useApi()实现 ├── types.js → 类型定义 └── api.js → 统一导出入口 ↓ Vue 组件调用 pages/*.vue →import{getProjects}from'~/api/projects'

优势

符合 Nuxt3 最佳实践- 使用 composable 模式

模块化组织- 按业务模块分离

向后兼容- Vue 组件调用方式无需修改

代码精简- 删除了冗余的未使用模块

统一底层- 所有 API 调用都基于useApi()

Vue 组件中的调用方式:

import{getProjects}from'~/api/projects'constresponse=awaitgetProjects(params)

附上composables/useApi.js

// composables/useApi.js// 使用 Composable 模式封装 API 请求,符合 Nuxt3 最佳实践import{ofetch}from'ofetch'/** * API Composable Hook * @returns {Object} API 请求方法和工具函数 */exportconstuseApi=()=>{constconfig=useRuntimeConfig()constAPI_BASE_URL=config.public.expressApiUrl||'http://localhost:3001'// 从 localStorage 获取 tokenconstgetToken=()=>{if(import.meta.client){returnlocalStorage.getItem('token')}returnnull}// 创建请求选项constcreateRequestOptions=(customOptions={})=>{consttoken=getToken()constoptions={baseURL:API_BASE_URL,timeout:10000,headers:{'Content-Type':'application/json',...(token&&{Authorization:`Bearer${token}`})},onRequestError:(error)=>{console.error('❌ Request Error:',error)throwerror},onResponseError:({response,error})=>{console.error('❌ Response Error:',error)// 统一错误处理if(response){const{status}=responseconstdata=response._data||{}switch(status){case401:// 未授权,清除 tokenif(import.meta.client){localStorage.removeItem('token')}breakcase403:console.error('没有权限访问')breakcase404:console.error('请求的资源不存在')breakcase500:console.error('服务器内部错误')break}error.message=data?.message||error.message}else{error.message='网络连接失败,请检查网络设置'}throwerror}}return{...options,...customOptions}}// 通用 API 请求函数constrequest=async(config)=>{const{method,url,params,data,...otherOptions}=configconstoptions=createRequestOptions(otherOptions)// 构建完整 URLletfullUrl=urlif(params){constsearchParams=newURLSearchParams(params)constqueryString=searchParams.toString()constseparator=fullUrl.includes('?')?'&':'?'fullUrl=`${url}${separator}${queryString}`}// 添加请求体if(data&&['post','put','patch'].includes(method?.toLowerCase())){options.body=data}// 开发环境日志if(import.meta.client&&window.location.hostname==='localhost'){console.log(`🚀 API Request:${method?.toUpperCase()}${url}`,{params,data,})}try{constresponse=awaitofetch(fullUrl,{...options,method:method?.toLowerCase()})// 开发环境日志if(import.meta.client&&window.location.hostname==='localhost'){console.log(`✅ API Response:${method?.toUpperCase()}${url}`,response)}returnresponse}catch(error){console.error('API 请求错误:',error)throwerror}}// HTTP 方法封装constget=(endpoint,params)=>request({method:'GET',url:endpoint,params})constpost=(endpoint,data)=>request({method:'POST',url:endpoint,data})constput=(endpoint,data)=>request({method:'PUT',url:endpoint,data})constdel=(endpoint)=>request({method:'DELETE',url:endpoint})constpatch=(endpoint,data)=>request({method:'PATCH',url:endpoint,data})// Token 管理consttokenManager={get:getToken,set:(token)=>{if(import.meta.client){localStorage.setItem('token',token)}},remove:()=>{if(import.meta.client){localStorage.removeItem('token')}}}// 导出 ofetch 实例以供特殊情况使用constapiFetch=ofetchreturn{get,post,put,del,patch,tokenManager,request,apiFetch,getBaseUrl:()=>API_BASE_URL}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/2 23:36:44

系统软件找不到msxml6.dll如何修复? 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/3/25 15:36:52

客户续签率下滑?这套反馈管理,让客户粘性提高80%

在一次产品增长的闭门会上,有个做B端产品的客户聊到最近的困境——他们团队的产品迭代优化没问题,但在维护付费客户的过程中,发现整体客户满意度不高,续签率更是明显下滑。 调查下来,发现影响续签率的原因之一是——产…

作者头像 李华
网站建设 2026/3/25 16:18:48

什么是漏洞扫描

漏洞扫描是什么?漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。是受限制的计算机、组件、应用程序或其他联机资源的无意中留下的不受保护的入口点。漏洞扫描是指基于漏洞数据库&a…

作者头像 李华
网站建设 2026/3/17 22:57:17

学霸同款9个AI论文工具,专科生轻松搞定毕业论文!

学霸同款9个AI论文工具,专科生轻松搞定毕业论文! AI 工具如何助力论文写作? 在当前的学术环境中,越来越多的学生开始借助 AI 工具来提升论文写作效率。尤其是在面对毕业论文这一重要任务时,AI 工具不仅能够帮助学生快速…

作者头像 李华
网站建设 2026/3/11 4:39:03

【拯救HMI】帮助系统集成:在HMI界面中提供实时指导

传统的纸质手册或独立的帮助文件在紧张的工业操作中往往形同虚设。现代HMI的帮助系统必须进化,从“离线档案馆”变为“在线智能教练”,实现情景感知、即时获取、按需指导,无缝嵌入到工作流程中,切实降低操作复杂度与培训成本。一、…

作者头像 李华
网站建设 2026/3/29 15:39:04

【拯救HMI】黑暗模式在工业环境中的应用价值与设计方法

工业控制环境正经历一场“视觉革命”——黑暗模式(Dark Mode)已从消费电子领域,凭借其显著的工效学优势,深入24小时运行的车间与控制室。它并非简单的颜色反转,而是一套基于人眼生理特性、旨在降低视觉疲劳、增强情境感…

作者头像 李华