软件开发过程中前后端联调相关问题

news2024/11/17 15:49:00

一、接口调用三步曲

1. uniapp接口调用

  1. data中定义项目1

  2. onload中调用

例如:this.getSwiperList()//调用获取轮播图数据的方法

  1. method中定义获取方法在这里插入图片描述

2. 微信小程序接口调用

  1. reques.js中接口封装

如:ScenicspotInfo (data)=> request(POST,‘getScenicspotInfo’,data),

在这里插入图片描述

  1. 需求页面.js(如detail.js)顶部引用接口封装文件

如: const $api = require(“…/…/utils/request”).Api;

在这里插入图片描述

  1. 定义调用页面数据接口的方法
TicketDetailApiWay(){
 $api.ScenicspotInfo({ 'id':1 }).then((res) => {
 this.setData({})
 }).catch(() => {console.log(error)})
}

在这里插入图片描述
需要传递参数(如id)测试的在这里插入图片描述

二、前端如何规范地模拟数据?

1. 接口文档规范(eg:首页楼层数据)

  • 1.请求路径:https://请求域名/api/public/v1/home/floordata
  • 2.请求方法:GET
  • 3.请求参数
参数名参数说明备注
  • 4.响应参数
参数名参数说明备注
floor_title楼层标题
product_list楼层内容列表
name名称
image_src图片路径
image_width商品图片宽度
open_type导航链接类型
navigator_url导航链接路径
  • 5.响应数据
{
    "message": [
        {
            "floor_title": {
                "name": "时尚女装",
                "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor01_title.png"
            },
            "product_list": [
                {
                    "name": "优质服饰",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor01_1@2x.png",
                    "image_width": "232",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=服饰"
                },
                {
                    "name": "春季热门",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor01_2@2x.png",
                    "image_width": "233",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=热"
                },
                {
                    "name": "爆款清仓",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor01_3@2x.png",
                    "image_width": "233",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=爆款"
                },
                {
                    "name": "倒春寒",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor01_4@2x.png",
                    "image_width": "233",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=春季"
                },
                {
                    "name": "怦然心动",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor01_5@2x.png",
                    "image_width": "233",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=心动"
                }
            ]
        },
        {
            "floor_title": {
                "name": "户外活动",
                "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor02_title.png"
            },
            "product_list": [
                {
                    "name": "勇往直前",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor02_1@2x.png",
                    "image_width": "232",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=户外"
                },
                {
                    "name": "户外登山包",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor02_2@2x.png",
                    "image_width": "273",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=登山包"
                },
                {
                    "name": "超强手套",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor02_3@2x.png",
                    "image_width": "193",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=手套"
                },
                {
                    "name": "户外运动鞋",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor02_4@2x.png",
                    "image_width": "193",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=运动鞋"
                },
                {
                    "name": "冲锋衣系列",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor02_5@2x.png",
                    "image_width": "273",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=冲锋衣"
                }
            ]
        },
        {
            "floor_title": {
                "name": "箱包配饰",
                "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor03_title.png"
            },
            "product_list": [
                {
                    "name": "清新气质",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor03_1@2x.png",
                    "image_width": "232",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=饰品"
                },
                {
                    "name": "复古胸针",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor03_2@2x.png",
                    "image_width": "263",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=胸针"
                },
                {
                    "name": "韩版手链",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor03_3@2x.png",
                    "image_width": "203",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=手链"
                },
                {
                    "name": "水晶项链",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor03_4@2x.png",
                    "image_width": "193",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=水晶项链"
                },
                {
                    "name": "情侣表",
                    "image_src": "https://www.zhengzhicheng.cn/pyg/pic_floor03_5@2x.png",
                    "image_width": "273",
                    "open_type": "navigate",
                    "navigator_url": "/pages/goods_list?query=情侣表"
                }
            ]
        }
    ],
    "meta": { "msg": "获取成功", "status": 200 }
}

2. 运用数据

2.1 左边单图片渲染时,利用{}动态设置图片的宽,下标为数组的索引,不用循环

:src="item.product_list[0].image_src" :style="{width:item.product_list[0].image_width + 'rpx'}"

2.2右边多图片渲染时,用循环,每循环一次可以得到一个item项,命名为item2和索引命名为i2,将索引当作key,

v-for="(item2,i2) in item.product_list"
//那么图片的地址为
<image src="item2.image_src" mode=""></image>
//完整渲染代码为
<view class="right-img-item" v-for="(item2, i2) in item.product_list" :key="i2" v-if="i2 !== 0">
<image :src="item2.image_src" :style="{width:item2.image_width + 'rpx'}" mode="widthFix"/>
</view>

2.3 点击图片如何跳转到对应的商品列表页?

在这里插入图片描述

  • 分析:给到的数据为"navigator_url": “/pages/goods_list?query=服饰”( ——问号前面是路径,问好后面是路径的参数),实际创建的商品列表页在分包目录下,如何跳转到各自对应的正确目录? 涉及到自定义url、拆分字符串、拼接字符串、为每个图片对象挂载一个自定义url属性(——即将要跳转到的地址),对原数据进行分割,先做字符串的split分割(——分割之后索引为1的项就是问号后面的值,即路径的参数,)再拿到索引为1的项,动态拼接过来。
// 通过双层 forEach 循环,处理 URL 地址
// prod是形参,用于遍历,参数从问号处做分割,split会把字符串以问号分割成数组,索引为1的是问号后面的值
res.message.forEach(floor => {
	floor.product_list.forEach(prod => {
	prod.url = '/subpkg/goods_list/goods_list?' + prod.navigator_url.split('?')[1]
})
})
  • 成功结果如下:在这里插入图片描述

3. 规范地模拟数据之多级菜单分类

//一级、二级、三级分类之间通过children属性嵌套,最外层[]里面存放所有一级分类,一级分类的children属性就是它的二级分类
{
    "message": [
        {
            "cat_id": 1,
            "cat_name": "大家电",
            "cat_pid": 0,
            "cat_level": 0,
            "cat_deleted": false,
            "cat_icon": "",
            "children": [
                {
                    "cat_id": 3,
                    "cat_name": "电视",
                    "cat_pid": 1,
                    "cat_level": 1,
                    "cat_deleted": false,
                    "cat_icon": "",
                    "children": [
                    {
                        "cat_id": 5,
                        "cat_name": "曲面电视",
                        "cat_pid": 3,
                        "cat_level": 2,
                        "cat_deleted": false,
                        "cat_icon": "full/2fb113b32f7a2b161f5ee4096c319afedc3fd5a1.jpg"
                    }]
                }
            ]
        }
    ],
    "meta": {
        "msg": "获取成功",
        "status": 200
    }
}
  

在这里插入图片描述

三、涉及项目逻辑问题的接口调用

示例:

在这里插入图片描述

1、上传图片接口请求

    submit() {
        console.log('点击完成')
        this.cropper.getImg((obj) => {
            //app.globalData.imgSrc = obj.url;
            // console.log( obj.url)
            // 上传方法 ,这个name属性是最重要的属性,他对应着后端传参数的值
            wx.uploadFile({
                url: 'http://192.168.2.50:8060/Api/UploadStarFilmImg',
                filePath: obj.url,
                name: 'file',
                header: {
                    'Content-Type': 'multipart/form-data' // POST默认值
                },
                method: 'post',
                formData: {
                    code: ''
                },
                success: (res) => {
                    //console.log('图片接口数据-----', res)
                    let result = JSON.parse(res.data)
                    console.log('图片接口数据result-----', result)
                    // 图片code存到本地
                    this.setData({
                        imgcode: res.code
                    })
                    app.globalData.imgcode = result.code
                    app.globalData.imgSrc = 'http://192.168.2.50:8012/SFImgPath/' + result.img
                    wx.navigateTo({
                        url: '/pages/index/addnext?src=' + config + result.img + "&imgCode=" + result.code,
                        //  裁剪完成点击跳转,携带的图片路径传入下一个页面,拼接字符串实现
                        // url: `/pages/index/addnext?imgSrc=${obj.url}`,
                    })
                },
                fail:(res)=>{
                    console.log(res)
                }
            });
        });
    },

2、上传录音和提交信息接口

上传录音接口请求 finish.js点击制作完成时
提交信息接口请求 addfinished.js、addfinishedtxt.js点击制作完成时

    Toendpage() {
        //------------------------------------------------------------------------------上传录音
        var voice = this.data.voice;
        wx.uploadFile({
            url: 'http://192.168.2.50:8060/Api/UploadStarFilmVoice',
            filePath: voice,
            name: 'file',
            header: {
                'Content-Type': 'multipart/form-data' // POST默认值
            },
            method: 'post',
            formData: {
                code: ''
            },
            success: res => {
                //console.log('录音接口数据-----', res)
                var resultV = JSON.parse(res.data);
                app.globalData.voice = resultV.voice
                console.log('录音接口数据resultV-----', resultV)
                // 将voice存到全局
                app.globalData.voice = 'http://192.168.2.50:8012/SFVoicePath/' + resultV.voice
                this.setData({
                    voice: resultV.voice
                })
                wx.navigateTo({
                    url: '/pages/addfinished/addfinished?voice=' + config + resultV.voice,
                })
            }
        })
        // 关闭loading提示
        wx.hideLoading()
        //---------------------------------------------------voice的提交信息接口
        wx.request({
            url: 'http://192.168.2.50:8060/Api/SubmatStarFilmInfo',
            data: {
                code: app.globalData.imgcode,
                sftype: 0,
                word: app.globalData.voice,
                status: 1,
                signature: this.data.bywho,
                towritten: this.data.towritten,
            },
            header: {
                'Content-Type': 'application/x-www-form-urlencoded' // POST默认值
            },
            method: 'post',
            success: res => {
                var resultS = res.data;
                console.log('提交信息接口数据resultS-----', resultS)
                wx.navigateTo({
                    url: '/pages/end/end?src=' + resultS.code + "&Voice=" + resultS.voice,
                })
            }
        })

    },

3、查询接口请求end.js和endtxt.js,oppositeget.js和oppvoice.js

       onLoad(options) {
        // 录音时间赋值
        let content = wx.getStorageSync('content')
        this.setData({
            speck_time: content.speck_time,
        })
        this.data.imgCode = app.globalData.imgcode
        console.log(this.data.imgCode)
        // 清除code
        app.globalData = {
            userInfo: null,
            imgSrc: '',
            imgcode: '',
            voice: '',
            CreateTimeStr: '',
        }
        var that = this;
        wx.request({
            url: 'http://192.168.2.50:8060/Api/SelStarFilmInfo',
            data: {
                code: this.data.imgCode
            },
            method: 'post',
            header: {
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            success: function (res) {
                console.log('直接打印不用转化', (res.data))
                that.setData({

                    word: res.data.data.Word,
                    Signature: res.data.data.Signature,
                    ToWritten: res.data.data.ToWritten,
                    imgSrc: 'http://192.168.2.50:8012/SFImgPath/' + res.data.data.Img
                })
            }
        })
    },

4、全局变量设置

在这里插入图片描述

5、清除code

在这里插入图片描述

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

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

相关文章

高级web前端开发工程师的岗位职责最新(合集)

高级web前端开发工程师的岗位职责最新1 职责&#xff1a; 1.主导公司前端开发的技术方向&#xff0c;指导其他前端开发人员工作 2.负责产品的Web前端开发及用户交互体验设计; 3.基于HTML、CSS、JavaScript标准进行页面制作&#xff0c;编写界面组件; 4.协同后台开发工程师&…

8.4 day05软件学习

文章目录 微服务的概念微服务的原则微服务的特征&#xff1a;集群介绍 spring aop 在家学习效率真不高&#xff0c;下午好兄弟喊出去玩&#xff0c;一直到晚上才回来&#xff0c;赶紧总结一下早上学习的内容。 继续看java基础进阶的思想&#xff0c;之前学的很多都忘了。 微服…

网工内推 | 实施、售后工程师,厂商认证优先

01 安井食品集团股份有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责集团组网的网络规划、实施、维护工作&#xff1b; 2.负责公司局域网的网络规划、实施、维护工作&#xff1b; 3.负责公司企业安全系统规划、实施、维护工作&#xff1b; 4、负责公…

百度UEditor编辑器如何关闭抓取远程图片功能

百度UEditor编辑器如何关闭抓取远程图片功能 这个坑娘的功能&#xff0c;开始时居然不知道如何触发&#xff0c;以为有个按钮&#xff0c;点击一下触发&#xff0c;翻阅了文档&#xff0c;没有发现&#xff0c;然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发&a…

LT6711A 是一款HDMI 2.0转DP 1.2/EDP 1.4的芯片,实用于AR或者PC以及PAD

LT6711A 1.概述&#xff1a; Lontium LT6711A是HDMI2.0到DP1.2转换器&#xff0c;内部有c型替代模式开关和PD控制器。对于HDMI输入&#xff0c;LT6711A具有一个HDMI2.0接收器&#xff0c;有1个时钟通道和3个数据通道&#xff0c;每个数据通道最大运行6Gb/s&#xff0c;最大输…

DAY02_Spring第三方资源配置管理Spring容器Spring注解开发Spring整合Mybatis和Junit

目录 一 第三方资源配置管理1 管理DataSource连接池对象问题导入1.1 管理Druid连接池1.2 管理c3p0连接池 2 加载properties属性文件问题导入2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 二 Spring容器1 Spring核心容器介绍问题导入1.1 创建容器1.2 获取bean…

智能汽车驾驶演进:虚拟ECU种类与优劣分析

现代汽车更安全、更舒适、更智能的代价是车载ECU&#xff08;Electronic Control Unit&#xff09;数量的迅速增长&#xff0c;与之相对应的是ECU上规模软件越来越大、软件开发成本在整车制造成本中的占比越来越高。车企可以从规则与方法两个角度入手来解决上述问题&#xff1a…

ES6新增的语法

ES6实际上是一个泛指&#xff0c;泛指 ES2015 及后续的版本 1&#xff0c;let用于声明变量的关键字 let 声明的变量只在所处于的代码块内有效 if (true) { let a 10 } console.log(a) // a is not defined 2, let 不存在变量提升 console.log(a) // a is not deined let a 1…

元素2D转3D 椭圆形旋转实现

椭圆旋转功能展示 transform-style: preserve-3d;&#xff08;主要css代码&#xff09; gif示例&#xff08;背景图可插入透明以此实现边框线的旋转&#xff09; 导致的无法点击遮挡问题可以参考我的另一个文章 穿透属性-----------------------css穿透属性 实时代码展示

如何与 Boot Barn 建立 EDI 连接?

Boot Barn 专注于提供各种高品质的靴子、鞋类和西部服饰。其经营范围广泛&#xff0c;为广大顾客提供最新潮流和经典款式的选择。 Boot Barn 的使命是成为顾客在西部风格时尚领域的首选购物地点。多年来&#xff0c;Boot Barn 凭借卓越的服务和优质的产品赢得了众多客户的信赖和…

LabVIEW使用DSA技术从X射线图像测量肺气容量

LabVIEW使用DSA技术从X射线图像测量肺气容量 相衬X射线&#xff08;PCX&#xff09;成像技术利用相邻介质之间折射率的微小差异来增强传统X射线成像通常不可见的物体的边界。事实证明&#xff0c;这一进展在一系列生物医学和材料科学中非常有益于材料表征、疾病检测以及解剖形…

Hive 中把一行记录拆分为多行记录

背景 业务场景&#xff1a;统计每个小时视频同时在线观看人数&#xff0c;因后台的业务数据是汇总之后的&#xff0c;只有开始时间、结束时间&#xff0c;没有每小时的详细日志数据&#xff0c;无法直接进行统计&#xff0c;所以需要对每条业务数据进行拆分&#xff0c;来统计…

【redis】能ping通虚拟机但是telnet不通

问题 虚拟机上有redis&#xff0c;能ping通虚拟机的ip&#xff0c;但是telnet已启动的redis6379端口失败 基本情况 虚拟机网络模式是NAT模式&#xff0c;linux防火墙firewalld已关闭&#xff0c;没有iptables&#xff0c;主机和虚拟机能互相Ping通&#xff0c;主机telnet re…

后端进阶之路——Spring Security构建强大的身份验证和授权系统(四)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

鸿蒙的初项目

经过这几天的了解&#xff0c;我还是决定挑战一下自己用ets语言去写一个鸿蒙的程序&#xff01; 先创建了一个ets的项目&#xff0c;然后我发现这里面有一个组件叫Flex&#xff0c;跟css里面的弹性布局好像差不多&#xff0c;但是用法略有差异&#xff0c;这个Flex是在&#xf…

Python---Numpy

文章目录 1.Numpy是什么&#xff1f;2.ndarray2.1 什么是ndarray?2.2 ndarray的属性2.3 ndarray的类型 3.Numpy基本操作3.1 生成0或1的数组3.2 从现有数组生成数组拓展&#xff1a;浅拷贝和深拷贝 3.3 生成固定范围的数组3.4 生成随机数组3.4.1 正态分布3.4.2 均匀分布 3.5 形…

网络安全(黑客)工具篇

大家好&#xff0c;我是白菜。这篇文章给大家盘点那些年&#xff0c;我们一起玩过的网络安全工具。 一、反恶意代码软件 1.Malwarebytes 这是一个检测和删除恶意的软件&#xff0c;包括蠕虫&#xff0c;木马&#xff0c;后门&#xff0c;流氓&#xff0c;拨号器&#xff0c;…

3D视觉算法工程师的工资,真是离谱!

小凡&#xff1a;「与其服务一个公司&#xff0c;不如服务一个行业」 一 我的从业经历 大家好&#xff0c;我是小凡&#xff0c;「3D视觉从入门到精通」知识星球的星主。 这里简单介绍下的我的从业经历。 本科主要是做机械出身&#xff0c;研究生入行3D视觉&#xff0c;这里…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[二]

文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能02-创建项目基础界面需求分析效果图思路分析 代码实现项目前后端分离情况项目前后端分离情况如图 注意事项和细节 SSM–搭建Vue 前端工程–项目基础界面 实现功能02-创建项目基础界面 需求分析 效果图 思路分析 使用V…

.Net6 Web Core API 配置 Autofac 封装 --- 依赖注入

目录 一、NuGet 包导入 二、Autofac 封装类 三、Autofac 使用 四、案例测试 下列封装 采取程序集注入方法, 单个依赖注入, 也适用, 可<依赖注入>的地方配置 一、NuGet 包导入 Autofac Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy 二、Auto…