nuxt3 api如何透传(不引第3方库)

背景:

nuxt做为一个vue的服务端渲染框架,本身就具备服务端的功能,理论上可以完整做一个系统功能,包括对数据库等等操作,但更合理的做法是nuxt应该定位只做服务端渲染的事情,更偏向ui层面,而非数据curd,业务逻辑,权限等等偏向服务端的逻辑。本身基于vue的服务端渲染已经也挺耗性能,所以应该单独规划一层,类似bff+ui;

按这个规划nuxt的数据来源就应该是透传到内部的服务器,那么怎样实现透传呢?

解决方案:

1.如果服务端设计的session存储方式是cookie,则可以通过配置nuxt.config.ts

routeRules: {"/sapi/**": {proxy: {to: "http://xxx/**",},},},

的方式,将本地请求地址/api/xx,完全代理到http://xxx/xx

类似nginx的代理功能;用nginx完全可以代替,性能可能还更好

2.如果服务端设计的是jwt,在header加其他字段保存的方式,那上面的方式就不行了

为什么不行?因为一个界面打开的时候,请求头是不会自动带任何自定义的东西的,这个功能只有cookie才能完成。所以如果登录后,刷新一个需要登录后的页面,这个获取不到页面任何凭证,所以会退出到登录页。要完整实现这种功能就需要做一些中间件拦截代理请求,将token获取到后,转成cookie下发到客户端,同时拦截客户端提交请求,将cookie的信息又转成header的信息再提交给代理。routeRules的proxy提供的配置项貌似完成不了这个功能,只能在server/middleware下面添加中间件处理


export default defineEventHandler(async (event) => {console.log('New request: ' + getRequestURL(event), getCookie(event, "name"))console.log('event.path ' + event.path)if (event.path.includes('/api/')) {let surl = event.path.replace('/api/', '/sapi/')const res = await $fetch(surl, {headers: {auth: "123456",cookie: getRequestHeader(event, "cookie")},server: true,method: "POST",body: { start: 0, limit: 5, mtype: "dev" },onResponse({ request, response, options }) {// Log response//setResponseHeaders(event, response.headers)setResponseHeader(event, "set-cookie", response.headers.getSetCookie())console.log("[fetch headers]", response.headers.getSetCookie());},});console.log(2);//const cookie = res.headers.get('set-cookie')//console.log('cookie: ' + cookie)console.log('Response: ' + JSON.stringify(res))return res;}})

每个请求都会经过,server/middleware 下面所有的文件进行拦截,除了routeRules配置的proxy匹配到的不会。

参考上述cookie处理的过程,改成对应jwt方案

其他补充:

$fetch的相关使用方式看ofetch

中间件相关的写法参考h3

nuxt内置的服务器是nitro 

参考:

https://github.com/unjs

https://github.com/unjs/h3

https://github.com/unjs/ofetch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据分析统计

大数据分析统计 from datetime import datetimeimport pandas as pd import matplotlib.pyplot as pltpm25files [PM2.5_2021.csv, PM2.5_2022.csv, PM2.5_2023.csv] pm10files [PM10_2021.csv, PM10_2022.csv, PM10_2023.csv]def read_csv_file(files):# 每个文件都有表头…

C++之类(class)的三种成员修饰符(public、private、protected)总结

1、背景介绍 在C中,类(class)中成员的三种访问修饰符(access specifiers)用于控制类的成员(属性和方法)的访问权限。这些修饰符决定了类成员在类的外部和内部是否可以被访问。以下是这三种访问…

macOS上编译android的ffmpeg及ffmpeg.c

1 前言 前段时间介绍过使用xcode和qt creator编译调试ffmepg.c,运行平台是在macOS上,本文拟介绍下android平台如何用NDK编译链编译ffmepg库并使用。 macOS上使用qt creator编译调试ffmpeg.c macOS上将ffmpeg.c编译成Framework 大体思路: 其…

信息学奥赛初赛天天练-18-挑战程序阅读-最长公共子序列、字符串与数组越界的巧妙应用

PDF文档公众号回复关键字:20240601 1 2023 CSP-J 阅读程序2 阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填√,错误填;除特殊说明外,判断题1.5分,选择题3分,共计40分&#xff…

从创意到成功:创业全过程详解

目录 创业目标市场的选择和分析用户画像的描绘软件产品的核心功能和价值主张竞争对手分析及自身竞争优势目标用户的具体需求调研初步的产品设计思路或框架技术栈的选择基于哪些考量如何规划产品的迭代路线图预计的商业模式 1. 创业目标市场的选择和分析 市场选择的重要性 创…

YOLOv10涨点改进:IoU优化 | Powerful-IoU更好、更快的收敛IoU,效果秒杀CIoU、GIoU等 | 2024年最新IoU

💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数 💡💡💡MS COCO和PASCAL VOC数据集实现涨点 《YOLOv10魔术师专栏》将从以下各个方向进行创新: 【原创自研模块】【多组合点优…

spark SQL优化器catalyst学习

一、Catalyst 概述 Catalyst 是 Spark SQL 的优化器,它负责将 SQL 查询转换为物理执行计划。Catalyst 优化器的目标是生成高效的执行计划,以最小化查询的执行时间。它使用了多种优化技术,包括基于规则的优化、基于代价的优化和动态规划等。我…

Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言: Dijkstra算法博客讲解分为两篇讲解,这两篇博客对所有有难点的问题都会讲解,小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(p…

openstack 中如何检查VLAN 配置: 确保正确配置了两个 VLAN,并且两个 VLAN 之间进行了正确的路由。

在 OpenStack 中检查 VLAN 配置并确保两个 VLAN 之间进行了正确的路由,可以按照以下步骤进行操作: 查看网络配置: 登录到 OpenStack 控制节点上的命令行界面。使用 neutron net-list 命令查看当前存在的网络列表。找到与你关注的 VLAN 相关的…

计网ppt标黄知识点整理第(2)章节——谢希仁版本、期末复习自用

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。4 个特性: 机械特性:指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性:指明在接口电缆的各条线上出现…

如何在 JS 中快速读取文件

本文翻译自 How to read files quickly in JavaScript,作者:Daniel Lemire, 略有删改。 假设你需要在服务器上使用JavaScript读取多个文件。在像Node.js这样的运行时环境中,JavaScript有多种读取文件的方式。哪一种是最好的呢&…

Linux软件安装包rpm与tgz格式的区别

rpm与tgz的区别 1、Linux软件包的内容分类2、Linux软件包的格式分类 1、Linux软件包的内容分类 Linux应用程序的软件包按内容类别可分为两类: 可执行文件(编译后的二进制软件包) 解包后可以直接运行,看不到源代码。例如&#xff0…

基于Springboot驾校预约平台小程序的设计与实现(源码+数据库+文档)

一.项目介绍 系统角色:管理员、教练、学员 小程序(仅限于学员注册、登录): 查看管理员发布的公告信息 查看管理员发布的驾校信息 查看所有教练信息、预约(需教练审核)、评论、收藏喜欢的教练 查看管理员发布的考试信息、预约考试(需管理…

代码随想录算法训练营Day8|541. 反转字符串II、替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

541. 反转字符串II 1.这道题刚开始把题意理解错了,以为对于任意长度的字符串都只反转[0,k-1]以及[2k,3k-1]区间的值。 2.但实际上是要把一个字符串分成若干长度为2k的小区间,反转前[0,k-1]的字符串,[k,2k-1]保持不变; 3.如果有一个区间字符串…

2024年东北师范CCPC

文章目录 A.Paper WateringB.nIM gAMEE.Checksum A.Paper Watering 思路:题目说有平方和开方两种操作,如果这个数是平方数,那么它开方之后就只能开方,如果平方的话就重复了,反之就有开方和平方两种操作。 代码如下 //…

为了方便看公众号文章,我搭建了个博客,在线看公众号所有历史文章,想看哪天的文章一秒就能找到

公众号没有个网页版的文章列表,只能在电脑和手机客户端看,想看之前的历史文章只能一直往下拉,想找某篇文章非常费劲。 为了方便看公众号文章,我搭建了个博客,博客地址https://sushengbuhuo.github.io/blog &#xf…

通过 SFP 接口实现千兆光纤以太网通信1

基于米联客ARTIX-7 系列开发板及其开发手册。 总体实现框图如下: SFP 接口 SFP 信号定义如下图所示。 Tri Mode Ethernet MAC 设置 由于使用千兆通讯,因此将速率设为 1Gbps。如下图所示。 首先,由于该 IP 需要与 IP 核 1G/2.5G Ethernet …

基于IoTDB 平台的学习和研究

Apache IoTDB(物联网数据库)是一个针对物联网领域的高性能原生数据库,适用于数据管理和分析,并可在边缘计算和云端部署。由于它轻量级的架构、高性能和丰富的功能集,以及与Apache Hadoop、Spark和Flink的深度集成&…

【面试】生成class文件的编译器有哪些?

目录 1. 说明2. javac3. IDE(集成开发环境)中的编译器3.1 Eclipse编译器3.2 IntelliJ IDEA编译器 1. 说明 1.javac和IDE中的编译器是最常用的和主要的。2.这些编译器都能够将Java源代码编译为可在JVM上执行的字节码文件,是实现Java跨平台特性的关键。3.选择编译器时…

数据管理知识体系必知的14张语境关系图

近期对数据管理知识体系中的语境关系图进行了整体学习梳理,总共有14张图,具体如下,供大家参考。应该说语境关系图和环境因素六边形图是各有侧重、互为补充关系。语境关系图是环境因素六边形图的细化,描述了每个知识领域中的细节,相当于数据管理的微观视角, 包括与人员、 …