news 2026/8/9 4:59:20

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/7/31 9:43:52

腾讯开源WeKnora_IMA框架深度解析

【重磅】腾讯开源 WeKnora(IMA):重新定义企业级智能文档检索在信息爆炸的数字化时代,腾讯正式开源了基于大语言模型的文档理解与语义检索框架——WeKnora(维娜拉)。这款工具将文档解析、智能检索与大模型推…

作者头像 李华
网站建设 2026/7/30 23:43:21

如何查阅最新的研究论文

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

作者头像 李华
网站建设 2026/8/4 14:44:14

如何用AI优化测试用例生成?实战案例

AI在测试用例生成中的革命性作用 在软件测试领域,测试用例生成是保障产品质量的核心环节,但传统方法依赖人工编写,存在效率低下、覆盖不全和易遗漏边界条件等问题。截至2026年,AI技术(如机器学习、自然语言处理和深度…

作者头像 李华
网站建设 2026/8/8 4:42:41

JS和jQuery中如何用append方法添加div元素?

在前端开发中,动态操作DOM是一项基本而频繁的任务。append方法和div元素是完成这项任务的两个核心工具。append用于向指定父元素的子节点列表末尾添加节点,而div作为最通用的容器元素,是承载动态内容的理想选择。理解如何高效地将两者结合&am…

作者头像 李华
网站建设 2026/8/8 9:04:32

Gitee 2026全景解读:为何中国开发者正加速拥抱国产代码托管平台

Gitee 2026全景解读:为何中国开发者正加速拥抱国产代码托管平台 在中国数字化转型浪潮中,代码托管平台已成为开发者不可或缺的基础设施。Gitee作为本土代码托管服务的领军者,正以其独特的本土化优势重构中国开发者的协作生态。最新数据显示&…

作者头像 李华