nuxt3 使用$fetch封装(typescript)客户端使用的http请求方法

2024-04-07 06:52

本文主要是介绍nuxt3 使用$fetch封装(typescript)客户端使用的http请求方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

nuxt3提供了usefetch()之类的方法来发起请求,他提供的这些方法貌似都是考虑和server端配合使用的,比如说在页面初始化前,有些数据是由后端提供,但是为了按SSR来渲染页面,就可以使用usefetch()来配合server先从后端获取数据,再渲染页面。所以我看文档,都是使用await等待,和之前我接触的异步请求非常不同。

而我想要的做的是由客户端直接向后端发起http请求的方法,usefetch()好像也可以设置只由客户端发起请求来使用,但是却没法由我自己来预处理后端返回的数据。

场景

后端返回的数据,有可能是json,也有可能是blob。这得由请求头"content-type"来确定。所以,需要对响应做预处理。研究了一圈,以前使用的axios貌似被nuxt3抛弃了,nuxt3支持的是fetch,那就用它自带的工具,也就不用再引入第三方库了。

let baseUrl = "http://127.0.0.1/";
// 指定后端返回的基本数据类型
export interface IResponse<T> {data?: T;code: number;headers: Headers;
}
function fetch<T>(url: string, options?: any): Promise<IResponse<T>> {return $fetch<IResponse<T>>(url, {...options,baseURL: baseUrl,onResponse({ response }) {// fetch 是会自动解析数据的,进入onResponse前就已经解析过了,它会智能地解析 JSON 和本机值,如果解析失败,则返回到文本,解析的结果就是response._datalet contentType = response.headers.get("content-type");// 请求码不为200等正常码的情况if (!response.ok) {// 这里的_data,会被后面catch捕获,因为你可能还需要获取headers等数据,所以需要在这里处理一下数据response._data = { code: -1, data: "请求已到达服务器但未正常响应:" + response.statusText, headers: response.headers };return;}// 我的后端只由json和blob两种类型,如果你的不止,那么就自己根据实际情况修改if (!contentType) {// 如果没有content-type,则认为返回的数据不符合预期response._data = { code: -1, data: "返回数据不符合预期" };return;} else if (contentType == "application/json; charset=utf-8") {//给数据再添加headersresponse._data.headers = response.headers; return;} else {// 后端返回的文件流,会包含该请求头const disposition = response.headers.get("content-disposition");if (!disposition) {response._data = { code: -1, data: "返回数据不符合预期" };return;}// 切割出文件名,后端返回格式不同处理就不同const blob = new Blob([response._data], { type: contentType });// 创建ObjectURL,返回给前端const blobUrl = window.URL.createObjectURL(blob);response._data = { code: 1, data: blobUrl, headers: response.headers };return;}},onRequestError({ error }) {// 请求失败的回调,这里的失败是指那种网络不通的之类请求都没到后端的情况,而不是后端返回码不是200之类的情况// 后端返回错误码的情况归onResponse管,这里只处理请求不通的情况},}).catch((error) => {// 请求不为200等正常码的情况,这里会捕获到,并返回给前端return error.data;});
}
// 此处的url,无需包含baseUrl
export function get<T>(url: string, params?: any) {return fetch<T>(url, { method: "get", ...params });
}export function post<T>(url: string, params?: any) {return fetch<T>(url, { method: "post", ...params });
}

关键点:fetch在onResponse()前就已经只能解析数据了,只需要通过response._data获取解析的结果就好,并且这个结果由你修改,然后前端接收的就是你修改后的结果

nuxt3 的 $fetch基于ofetch,所以,其余配置直接看它就可以,或者看nuxt3的usefetch(),它有什么参数,$fetch应该也有。

这篇关于nuxt3 使用$fetch封装(typescript)客户端使用的http请求方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是