Nuxt3 封装request请求

2024-08-29 23:28
文章标签 封装 请求 request nuxt3

本文主要是介绍Nuxt3 封装request请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Nuxt3已经为我们提供了 $fetch 直接用就好

  1. 首先在目录utils下创建 api.js 跟 request.js 两个文件,api文件是用来写具体的接口函数的,request是用来二次封装 $fetch 以达到适配我们项目的需要。
  2. 以下是我的request.js封装代码,可按需要修改
/*** @description 同步请求封装* @param {String} method 请求类型:get,post,delete,put...* @param {String} url  请求地址,不包含请求域名,如:/api/test* @param {Object} options  请求参数* @returns data or error*/
export const apiUse = async (url, method, options) => {// 当前locale将被存储在locale变量中const nuxtApp = useNuxtApp(); // 获取引入nuxt的第三方模块对象const runConfig = useRuntimeConfig(); // 获取环境变量const baseUrl = runConfig.public.baseUrl;const reqUrl = baseUrl + url;options = {method,headers: {"Content-Type": "application/json",},body: { // post 请求参数存放在body内,get请求参数放到params内...options,token: "",platform: "h5",language: nuxtApp.$i18n.locale.value,},};const {data,error} = await useFetch(reqUrl, options);if (error.value) {return error.value;} else {return data.value;}
};/*** @description 异步请求封装* @param {String} method 请求类型:get,post,delete,put...* @param {String} url  请求地址,不包含请求域名,如:/api/test* @param {Object} options  请求参数* @description key 一定要有,否则刷新会造成接口错误*/
export const asyncFetchData = async (url, method, options) => {const nuxtApp = useNuxtApp();const runConfig = useRuntimeConfig();const baseUrl = runConfig.public.baseUrl;const reqUrl = baseUrl + url;const key = url.split('/')[url.split('/').length - 1] //这里取接口最后的名称做keyconst {data,pending,error,refresh} = await useAsyncData(key, () => $fetch(reqUrl, { // useAsyncData也可以用useLazyAsyncData,区别就是useLazyAsyncData会等待SSR渲染完成在执行接口,而useLazyAsyncData是接口执行完成执行SSR渲染method,headers: {"Content-Type": "application/json",},body: {...options,token: "",platform: "h5",language: nuxtApp.$i18n.locale.value,},}));return {data,pending,error,refresh};
}/*** @description 此为apiUse的封装调用实例*/export const fGET = (url, params) => {return apiUse(url, "GET", params);
};export const fPOST = (url, params) => {return apiUse(url, "POST", params);
};export const fPUT = (url, params) => {return apiUse(url, "put", params);
};export const fDELETE = (url, params) => {return apiUse(url, "delete", params);
};/*** @description 此为asyncFetchData的调用实例*/
export const GET = (url, params) => {return asyncFetchData(url, 'GET', params);
};export const POST = (url, params) => {return asyncFetchData(url, "POST", params);
};export const PUT = (url, params) => {return asyncFetchData(url, "put", params);
};export const DELETE = (url, params) => {return asyncFetchData(url, "delete", params);
};
  1. 以下是我的api.js封装代码,可按需要修改
import {GET,POST,PUT,DELETE,fGET,fPOST,fPUT,fDELETE,
} from "./request"/*** @desc 根据Id查询隐私政策等文章* @param params 页面传递过来的参数*/
export const getNotice = (params) => {return POST('/sale/info/detail', params)
}
  1. 页面中使用接口方法

/*** @description 接口在页面中使用教程* 在页面中 不需要再Import 声明接口名,直接使用。因为Nuxt3会自动引用* getNotice 是api.js文件中封装的接口实例,仅需要输入参数即可。* then回调的是接口返回的结果,包含data,pending,error,refresh四种,可根据情况使用*/
getNotice({id: 1
}).then((res) => {const {data,error} = resif (error) {console.log(error.value)}else{console.log(data.value)}
})

这篇关于Nuxt3 封装request请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119148

相关文章

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

哈希表的封装和位图

文章目录 2 封装2.1 基础框架2.2 迭代器(1)2.3 迭代器(2) 3. 位图3.1 问题引入3.2 左移和右移?3.3 位图的实现3.4 位图的题目3.5 位图的应用 2 封装 2.1 基础框架 文章 有了前面map和set封装的经验,容易写出下面的代码 // UnorderedSet.h#pragma once#include "HashTable.h"

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

Java http请求示例

使用HttpURLConnection public static String httpGet(String host) {HttpURLConnection connection = null;try {URL url = new URL(host);connection = (HttpURLConnection) url.openConnection();connection.setReq

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置

项目一(一) HttpClient中的POST请求和GET请求

HttpClient中的POST请求和GET请求 一、HttpClient简述 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLU

使用http-request 属性替代action绑定上传URL

在 Element UI 的 <el-upload> 组件中,如果你需要为上传的 HTTP 请求添加自定义的请求头(例如,为了通过身份验证或满足服务器端的特定要求),你不能直接在 <el-upload> 组件的属性中设置这些请求头。但是,你可以通过 http-request 属性来自定义上传的行为,包括设置请求头。 http-request 属性允许你完全控制上传的行为,包括如何构建请求、发送请

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。 一、@RequestMapping @RequestMapping用于将特定的HTTP请求映射到特定的方法上

Nuxt3入门:过渡效果(第5节)

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。 Nuxt 利用 Vue 的 <Transition> 组件在页面和布局之间应用过渡效果。 一、页面过渡效果 你可以启用页面过渡效果,以便对所有页面应用自动过渡效果。 nuxt.config.js export default defineNuxtConfig({app: {pageTransition: {name: 'fade',mode