首页 > 其他分享 >11.业务功能实现---商品服务三级分类前后端联调

11.业务功能实现---商品服务三级分类前后端联调

时间:2022-09-02 14:47:03浏览次数:54  
标签:11 网关 服务 renren fast --- api data 联调

1.商品服务三级分类前后端联调

  1. 登录后台管理系统,添加系统管理菜单:
    目录(一级菜单)--商品系统、
    菜单(二级菜单)--分类维护、 ----- 在侧边栏会显示新增加的菜单;

  2. 编写分类维护菜单的前端页面代码
    在src -- views -- modules -- 新建product目录 -- 新建category.vue页面

<template>
  <el-tree :data="menus" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
</template>

<script>
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
// 例如:import 《组件名称》 from '《组件路径》';

  export default {
    // import引入的组件需要注入到对象中才能使用
    components: {},
    data() {
      return {
        menus: [],
        defaultProps: {
          children: "children",
          label: "name"
        }
      };
    },

    // 监听属性 类似于data概念
    computed: {},
    // 监控data中的数据变化
    watch: {},
    // 方法集合
    methods: {
      handleNodeClick(data) {
        console.log(data)
      },
      // 获取分类维护列表
      getMenus() {
        this.$http({
          url: this.$http.adornUrl('/product/category/list/tree'),
          method: 'get',
        }).then(({data}) => {
          console.log("成功获取到数据" + data)
          this.menus=data.data;
        })
      }
    },
    // 生命周期 - 创建完成(可以访问当前this实例)
    created() {
      this.getMenus();
    },
    // 生命周期 - 挂载完成(可以访问DOM元素)
    mounted() {},
    beforeCreate() {}, // 生命周期 - 创建之前
    beforeMount() {},  // 生命周期 - 挂载之前
    beforeUpdate() {}, // 生命周期 - 更新之前
    updated() {},      // 生命周期 - 更新之后
    beforeDestroy() {},// 生命周期 - 销毁之前
    destroyed() {},    // 生命周期 - 销毁完成
    activated() {}     // 如果页面有keep-alive缓存功能,这个函数会触发
  };
</script>

<style scoped>
</style>
  1. 刷新页面,点击该分类页面:报错404,Referrer Policy: strict-origin-when-cross-origin ---- 跨域问题

2.使用网关解决跨域问题

2.1修改前端配置

  1. 修改static -- config -- index.js文件,请求地址配置,让前端发起的请求统一到网关
// api接口请求地址
window.SITE_CONFIG['baseUrl'] = 'http://localhost:8088/api';

2.2修改后端admin服务(renren-fast)

  1. 把后端项目renren-fast注册进Nacos,在renren-fast项目的pom.xml文件中添加 webshop-common 依赖;(注意:renren-fast的版本与之前的服务要保持一致,否则服务启动会出问题,需要降低版本。)

  2. 在 renren-fast 项目的 application.yml 中加上配置中心地址和服务名

spring:
  application:
    name: renren-fast
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  1. 启动类再加上服务注册与发现的注解 @EnableDiscoveryClient
  2. 把renren-fast项目下config目录里的CorsConfig文件内容注释掉,跨域的配置在网关中进行;

2.3修改网关配置

  1. 说明:之后不管是对哪种服务的请求,都会先经过网关,经网关转发到具体的服务上去,那么就在网关层解决跨域问题;

  2. 创建一个CorsConfig类,配置跨域

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsWebFilter() {
        UrlBasedCorsConfigurationSource urlBased = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //允许跨域访问的请求头
        corsConfiguration.addAllowedHeader("*");
        //允许跨域访问的请求方法
        corsConfiguration.addAllowedMethod("*");
        //允许跨域访问的域名
        corsConfiguration.addAllowedOrigin("*");
        //是否支持安全证书,是否允许发送Cookie
        corsConfiguration.setAllowCredentials(true);
        urlBased.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(urlBased);
    }
}
  1. 网关服务的路由规则配置为:
spring:
  cloud:
    gateway:
      routes:
        - id: product_route
          uri: lb://webshop-product
          predicates:
            - Path=/api/product/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}
        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
  1. 说明:首先要清楚前端过来的请求,都会带一个api/,所以带/api/的请求路径都路由到后台管理系统服务;其次,商品服务是/api/product/**这样的一个形式,所以带有/api/product前缀的请求应该被路由到商品服务,重要的,更细致的路由规则应该放在前面,避免请求被一个更大范围匹配的路由规则分发到错误的服务。

2.4验证

  1. 启动项目:开启nacos服务端,启动网关服务,后台管理服务,商品服务;
  2. 登录后端管理平台,点击商品系统下的分类维护,可以看到有数据展示;
  3. 至此,商品服务三级分类初步联调完成。

注意

  1. renren-fast的版本与SpringCloud 的版本要匹配,否则服务启动出问题;

标签:11,网关,服务,renren,fast,---,api,data,联调
From: https://www.cnblogs.com/lailix/p/16649408.html

相关文章

  • opencv -- reshape()函数
    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。函数原型:C++:MatMat::reshape(intcn,introws=0)const......
  • 使用docker-compose搭建flink集群
    第一步:安装docker和docker-compose并赋予权限第二步:利用docker-compose构建容器1version:"2.1"2services:3jobmanager:4image:flink:1.9.2-scal......
  • 43. SQL--视图:create view
    1.前言视图(view)是一个由select查询所定义出来的虚拟表。我们知道,select查询会产生一个包含行和列的结果集,它在结构上和真实的物理表是类似的,您可以把这个结果集看做......
  • K8s - 重新生成token以及hash值(解决令牌过期的问题)
     当我们使用 kubeadminit 完成 Master 节点的安装后,界面上会输出如下 kubeadmjoin…… 命令。这个命令使用来将各个节点加入集群中。kubeadmjoin192.168.60......
  • 关于VMware-在线vMotion-vmware vcenter migrate-的操作记录
    因其中一台ESXI的本地磁盘损坏,替换上的磁盘未进行正常的Raid重组,于是准备关机再进行手动Raid重组,定位原因但毕竟还是有一定风险的,于是决定将这台ESXI上的主机全部迁移到其......
  • 2022-09-02 vue.js不使用插件,进引入vue,实现js原生复制功能
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=d......
  • 音视频技术入门课-02 音频从采集到输出涉及哪些关键参数?
    我们平常听到的自然界的声音,比如说鸟鸣、水流,其实是一种模拟信号,声音是振动产生的一种声波,通过气态、液态、固态的物理介质传播并能被人或动物感知的波动现象。声音的频率......
  • MyBatis-缓存
    1.MyBatis缓存MyBatis中的缓存针对查询功能,可以将查询的数据进行缓存,再次查询相同数据时,不会从数据库中查询,直接从缓存中获取。分为一级缓存和二级缓存。2. MyBati......
  • Hutool 日期时间工具-DateUtil
    格式化输出StringdateStr="2021-04-2101:02:03";Datedate=DateUtil.parse(dateStr);//结果2021/04/21Stringformat=DateUtil.format(date,"yyyy/MM/dd")......
  • 2022-2023-1 20221327 《计算机基础与程序设计》第一周学习总结
    作业信息班级:|https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP|作业要求:|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01|作业目标:快速浏览教材并......