后端总说他啥也没动,我从线上调了一下测试接口,你再说一句动没动

news2025/7/27 17:42:15

       ◇  不知道广大前端同学有没有过这样的经历,在做新需求联调的时候,原本上一个版本已经做的好好的功能,前后端已经联调好的。这次做需求的时候,测试发现好多地方都不对了。

        ◇ 开发人员经常说的一句话就是:我啥也没动啊。这次就是,我们这个后端,一口咬死,我啥也没动,要不你问一下前端是不是动哪里了?

6d68a77244d747a0abd10d21fc30acde.png

        如果这个时候你再和他争吵下去就像极了这个图片一样,两个人都张大了嘴,来吧,我们互相伤害。 

        因为是在测试环境,大家都做了新需求,谁也不敢保证自己没动,所以这个时候争吵是无意义的。那么幸亏我提前准备了一招。

 

1、现在前端是怎么区分测试环境与线上环境的? 

        其实这个问题现在是一个普遍现象,之前也说过好几次了。

        △ 大家都是通过npm run build /prod来区分环境的,所以如果准备测试的时候,我们很高兴的终于做完需求了,打了一个npm run build包,开始部署。

        测试阶段完了,测试同学说,咱们往测试环境部署一下正式包吧,验证一下线上环境的接口。然后我们又npm run prod一下,然后部署上去。测试验证过后,喊一声没问题了,发报告吧。发完收到通知,然后我们就开始把刚才npm run prod那个包部署到线上去。

        但是线上那个包,貌似验证不了测试环境吧?

 

        △ 还有一种方式呢,就是前端不做处理,把HTML做到服务端进行渲染。服务端是可以区分测试环境的机器与线上环境的机器的,所以我们前端只要打一个包就可以,不用区分测试与线上环境。只要服务端识别到是测试机器,还是线上机器,就可以在HTML页面帮我们渲染一个区分变量,我们前端用以区分请求环境。

        但是一但到了线上,貌似线上的js还是没法往测试环境发请求吧?

 

2、为什么要从线上往测试环境发请求?

        这也是出于周全考虑的一种策略行为。试想,在开发新需求的时候,如果后端的接口名字没变,只是参数变了;或者后端的接口没变,参数没变,逻辑变了?再或者后端直接把接口名字给变了;每一种情况其实都会有一定的危险的,所以,能不上线就不上线。

        比如后端把接口名字变了,我们没有反应及时,或者沟通不及时,那么这个时候的上线过程必定是要出问题的。

        比如后端参数变了,那么试想,我们前端先上线,线上的接口会不会不适应的新版本的js,服务端先上线,会不会接收不到前端的新参数而不适应。就会变得像下面这张图一样,造成扭曲的情况。

b52ba6e788104d4187c9369ed51818a8.png

 

        虽然每次我们所做的功能都应该是向后兼容的,但多做一些测试措施总是没错的。

 

3、线上怎么向测试环境发请求?

        △   例如测试环境的请求前缀是  test.xx.com/api    而线上环境的请求前缀是 prod.xx.com/api

        △   那么我们前端一定是要有地方适配这2个前缀的。

        △  比如我们的网站访问地址为: www.ooo.com 这个时候调用的一定是prod.xx.com/api的请求域名

        △ 这个时候我们手动给url加个参数 例如 www.ooo.com?test=ok

        △ 这个时候如果没有任何操作,其实这对我们网站是没有任何意义的,但是我们可以在js的代码里做适配

function geturlparam(key){
   let url = window.location.href;
   let params = url.split('?')[1]
   let getParam = new URLSearchParams(p);
   return getParam.get(key);
}
var testOrProd = geturlparam('test'); 
let urlDomain = '';
if (testOrProd === 'ok') {
    urlDomain = 'test.aa.com/api';
} else {
    urlDomain = 'prod.aa.com/api';
}

module.exports = urlDomain;

通过这种线上环境向测试环境发请求的方式,是不是就可以做到另一个维度的测试了呢

 

 

 

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

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

相关文章

Java -- 每日一问:你了解Java应用开发中的注入攻击吗?

典型回答 注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果。 下面是几种主要的注…

Web前端:2022年Web开发者的五大CSS工具

据相关数据统计,2018年至2028年,网络开发人员的就业预计将增长13%,这意味着网站开发者的需求量很大,而企业需要专业人员来构建网站,而高效制作优秀网站的最佳方法是拥有最好的web开发工具。 对优秀web开发工具的需求使…

设信号x(t)=cos(2π×50t)+2×cos(2π×400t),试将它的两个频率分量分离,并绘制它们的时域波形及频谱图

以下程序无需赋值,直接运行即可: (已验证可以运行) function [yl,yh]shiyan49 fs1600; %采样频率 Tt0.02; %信号周期 T04*Tt; %记录长度 [xn,wk,N]shiyan40(fs,T0); Mlength(wk); if M2 rp1;rs80; f1wk(1)*fs/N; f2wk(2…

升余弦滤波器的FPGA实现

目录 升余弦滤波器与无码间串扰(一) 升余弦滤波器与无码间串扰(二) 升余弦滤波器的FPGA实现 一、FIR ip核 成形滤波器采用vivado中的FIR ip核实现。滤波器的系数用matlab产生并转成coe文件。 wire m_axis_data_tvalid; rcos_f…

官网下载JAVA的JDK11版本(下载、安装、配置环境变量)

目录 前言: 一、下载JDK11 1.先去浏览器搜索 2.选择Products 3.Java ​编辑 4.往下滑找到Oracle JDK,然后点击 5.往下滑找到Java11,再选择自己的操作系统 6.选择exe这个直接安装的后缀 7.跳出来的弹窗勾选,并点击 8.弹出来一个甲骨文…

树莓派4b linux内核调试(jtag、kgdb)

1、-O0编译树莓派4b linux内核(linux-5.10.95) 内核源码分支: https://github.com/raspberrypi/linux/tree/rpi-5.10.y 参考其他网站,注释掉arch/arm64/include/asm/jump_label.h文件里面的内联汇编分支; 修改arch/arm64/include/asm/memory.h里面的MIN…

大一学生Web课程设计 美食主题网页制作(HTML+CSS+JavaScript)

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

传奇开服教程——传奇微端架设教程-GEE引擎

登录器和网站配置好后,我们进入游戏后会发现是黑屏的,更新不了地图和NPC这些,因为还没有做微端,会黑屏也是正常的。 有些GEE版本有配套的微端程序,有些版本没有,需要自己去gee官网下载更新时间比引擎还靠后…

多层固定分组计算

【问题】 I want to build opening closing report – ITEM_TRANSACTION TABLE- Consider below data– 1.When item is prepared entry is made into table wih NULL indicator.. 2. When Item is issued/sold entry is made into table with ISSUE indicator Date Iname I…

[附源码]SSM计算机毕业设计中学学生学籍管理JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

笔试强训第29天

单选 A选项:当内存访问越界的时候,线程会收到信号,进而进行信号处理。调用信号处理函数。 B选项:ACM时间。 A:最后访问时间,文件被读取而更新的时间 C:状态修改时间,文件的属性或者权…

遨博机械臂URDF功能包ROS仿真

文章目录知识目标1.机械臂URDF功能包文件结构2.URDF模型中的元素和参数3.任务描述3.1 修订launch启动文件参数3.2 URDF功能包编译知识目标 学习机械臂URDF功能包文件结构 掌握机械臂URDF模型文件各元素和参数概念 1.机械臂URDF功能包文件结构 2.URDF模型中的元素和参数 机械…

【mmDetection框架解读】入门篇三、VOC数据集转COCO数据集,在MMDetection中成功运行

目录一、voc数据集转coco数据集二、修改配置二、验证数据集是否转换成功相关源码文件一、voc数据集转coco数据集 执行命令: python tools/dataset_converters/pascal_voc.py ../../../data/devkit ../../../data/coco通过VOC的xml文件生成COCO的json标签文件。 再…

Linux下延时一定时间,又不挂起程序。

0.前言 这是一个解决篇Linux C语言怎么实现通过socket发送一秒数据,上次想要实现做一秒的事情没有写出来,这次解决掉。先推荐一部电影《猩球崛起》三部曲。 1.Linux下的sleep函数。 这个函数的确可以起到延时的作用,但是他会把整个进程挂起&a…

CentOS8替代盘点

常用的替代选项 国外替代 Rocky Linux AlmaLinux Oracle Linux UEK内核 CentOS Stream 国产替代 Anolis OS TencentOS Server(桌面版无法迁移) openEuler OpenCloudOS 宝塔面板 推荐 Rocky/Alma/Oracle linux 8 持保守态度 Centos 8 Stream Anolis(Centos 8 Stream…

L1和L2正则化的三种不同角度的理解

观看B站视频后写的笔记,链接 降低模型复杂度>正则化>减小模型参数个数 0. 前言 正则化是一个专有名词,和正则表达式中的正则没有任何关系。L1和L2正则化就是用L1范数和L2范数来规范模型参数的这么一种方法,Dropout也叫正则化&#x…

[附源码]SSM计算机毕业设计中小型便民药店管理论文JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux17 --- 消息队列

一、IPC进程间通信:消息队列 消息队列是在两个进程之间传递二进制块数据的一种简单有效的方式。每个数据块都有一个特定的类型,接收方可以根据类型来有选择地接收数据,而不一定像管道和命名管道那样必须以先进先出的方式接收数据。 Linux消…

BootStrap响应式项目实战之世界杯网页设计

BootStrap实战 目标 响应式布局复习 HTML5的复习 CSS3的复习 了解BootStrap 一.复习 响应式布局:页面可以随着设备的变化而动态改变。 ​ 淘宝:pc端一套页面:不能随着屏幕的缩小而变化; ​ 移动端:另外一套页面&am…

Java中的::

今天在练习SpringBoot的时候,看到了以下这种写法: //实体类: Data public class Book {private Integer id;private String type;private String name;private String description; }//测试类 //实现功能:关键字查询 Test void t…