当前位置: 首页 > news >正文

nuxt3中使用useFetch请求刷新不返回数据或返回html结构问题解决-完整nuxt3useFetchtch请求封装

  • 前言

如果使用nuxt3写项目,可以查看nuxt3实战:完整的 nuxt3 + vue3 项目创建与useFetch请求封装,此篇内容有详细步骤

但在此篇内容中useFetch请求在页面有多个请求的情况下,或者放在客户端渲染情境下是失败的,所以在此篇更新下useFetch的请求封装方法:

/*** @description  useFetch* */
import type { NitroFetchRequest } from "nitropack";
import type { UseFetchOptions } from "#app";
import type { ResultData } from "~/api/interface";
import { Base64 } from "js-base64";
import { rsaEncrypt } from "~/utils/ras";
import { Encrypt } from "~/utils/aes";
import { md5 } from "js-md5";const apiRequest = <T>(url: NitroFetchRequest,reqParams: object = {},_object: UseFetchOptions<T>
) => {const runtimeConfig = useRuntimeConfig();const token = useCookie<string | undefined>("token");const defaultOptions: UseFetchOptions<T> = {baseURL: runtimeConfig.public.baseAPI,onRequest({ options }) {let _data: {[prop: string]: any;} = {...reqParams,};if (token.value) {_data["userUuid"] = token.value;}// Gets the current timestampconst timestamp = new Date().getTime();// Generate an AES Keyconst aesKey = Base64.encode("jupai" + timestamp);// Service parameter aes encryption// console.log(_data, "_data");let reqContent = encodeURIComponent(Encrypt(JSON.stringify(_data), aesKey));// md5 signatureconst md5Sign = md5(reqContent).toUpperCase();// UrlDecode Decrypts the public keyconst rsaSign = encodeURIComponent(rsaEncrypt(aesKey));const params = {version: "1.0.0",osType: "1",reqContent: reqContent,md5Sign: md5Sign,rsaSign: rsaSign,timeStamp: timestamp,gps: "gps",_data,};options.headers = {...(token.value && { "X-Access-Token": token.value }),...(_object.headers || {}),...options.headers,} as { [key: string]: string };options.body = JSON.stringify(params);},onResponse({ response }) {if (response._data.code !== "200" && response._data.code !== "12010") {if (import.meta.client) {message.error(response._data.message);}}},onResponseError({ response }) {if (import.meta.client) {message.error(response._data.message);}},};return useFetch<ResultData<T>>(url, {...defaultOptions,..._object,} as any);
};export const getApi = async <T>(url: NitroFetchRequest,reqParams: object = {},_object: UseFetchOptions<T> = {}
) => {const { data } = await apiRequest<T>(url, reqParams, {method: "get",..._object,});return data;
};export const postApi = async <T>(url: NitroFetchRequest,reqParams: object = {},_object: UseFetchOptions<T> = {}
) => {const { data } = await apiRequest<T>(url, reqParams, {method: "POST",..._object,});return data;
};
  • 使用:
  • /api/modules/index
export const getList= (params: ReqLotList) => {return postApi<ResLotList[]>("/api/getList", params);
};
  • index.vue
const list= await getList({pageNum: 1,pageSize: 8
});
http://www.lryc.cn/news/532801.html

相关文章:

  • Kubernetes 中 BGP 与二层网络的较量:究竟孰轻孰重?
  • C中静态库和动态库的使用
  • Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM
  • 【FPGA】 MIPS 12条整数指令 【3】
  • Mac 部署Ollama + OpenWebUI完全指南
  • 蓝桥杯小白打卡第二天
  • Docker Compose:容器编排的利器
  • springboot项目的单元测试
  • JVM图文入门
  • cursor 开发java项目教程简单上手
  • 优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案
  • aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API
  • 物联网的三层架构:感知层、网络层与应用层
  • 常用抓包工具tcpdump、Fiddler、Charles、Wireshark 和 Sniffmaster 下载地址
  • π0开源了且推出自回归版π0-FAST——打造机器人动作专用的高效Tokenizer:比扩散π0的训练速度快5倍但效果相当
  • js-对象-JSON
  • Houdini subuv制作输出阵列图
  • 虚幻基础17:动画蓝图
  • 路由器及工作原理与常用路由配置命令详解
  • Windows编程:下载与安装 Visual Studio 2010
  • R语言 文本分析 天龙八部
  • 深度学习 Pytorch 建模可视化工具TensorBoard的安装与使用
  • 【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据
  • 19爬虫:使用playwright登录超级鹰
  • [转]Java面试近一个月的面试总结
  • Spring Boot中使用MockMvc测试PATCH请求控制器
  • html转PDF文件最完美的方案(wkhtmltopdf)
  • ip地址是手机号地址还是手机地址
  • 【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)
  • 从零开始:OpenCV 图像处理快速入门教程