问题1:springcloud的版本问题

在第一天开始搭建项目拦路虎就出现了,创建完父工程后spring-cloud的版本视频中写的Finchley.RC1但确一直加载不了相关的依赖,只需改成Finchley.SR1或者除了Finchley.RC1以外的版本即可。自己被这个耽误了可就时间,写出来让大家少走些不必要的坑。

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.SR1</spring-cloud.version><mybatis.starter.version>1.3.2</mybatis.starter.version><mapper.starter.version>2.0.2</mapper.starter.version><druid.starter.version>1.1.9</druid.starter.version><mysql.version>5.1.32</mysql.version><pageHelper.starter.version>1.2.3</pageHelper.starter.version><leyou.latest.version>1.0.0-SNAPSHOT</leyou.latest.version><fastDFS.client.version>1.26.1-RELEASE</fastDFS.client.version></properties>

问题2:leyou-manage-web运行不成功

然后到了导入前台vue项目了,结果又出现错误了,出错原因是项目中用的是2.5.16版本的而自己用的版本和项目中不一样。

报错如下:

- vue@2.6.12
- vue-template-compiler@2.5.16

解决:https://blog.csdn.net/qq_42052589/article/details/109790603

问题3:查询分类管理页面不显示数据问题

Category.vue页面中,treeData是假数据,我们删除数据treeData属性,只保留url就可以显示数据了,在视频中没删这个属性导致不看文档的话自己的页面不显示数据
<v-tree url="/item/category/list"<!--删除这行调用treeDate属性的假数据-->:isEdit="isEdit"@handleAdd="handleAdd"@handleEdit="handleEdit"@handleDelete="handleDelete"@handleClick="handleClick"/>

问题4:新增品牌失败

问题出现位置(以百度网盘位置为准):07-品牌管理/第二个视频/新增品牌

这是因为我们还没写绑定提交方法,因此在添加品牌信息后出现保存失败,如图:

解决办法:https://www.cnblogs.com/wqkeep/p/10736921.html#autoid-0-1-0

没看懂他写的可以再参考下我下面补充的:

至于出现的params参数这节视频中没讲到可能是后面会讲到,可以先照着写下来,要调用BrandForm.vue,需要在Brand.vue中的<script>中导入组件如下:

// 导入自定义的表单组件
import BrandForm from './BrandForm'

完整的submit()提交方法如下:

问题5:新增品牌图片上传FastDFS失败

这视频最大的问题就是跟着老师视频走他的程序不报错,自己的却报错真的很烦,出现问题了最好还是参考笔记进行排错,我是到了上传图片的时候,图片不显示报404,有时候又报500。现在对以下问题进行解决。(找了整整一天半的时间,是我自己太菜了不会排错!)

报错信息:

问题出现位置(以百度网盘位置为准):07-品牌管理/第四个视频/改造上传图片到FDFS

1.跟着视频写到绕过网关的时候需要在ly-geteway微服务的yml文件中配置忽略upload-service服务(视频中没写,我们最好还是加上)。

图片上传是文件的传输,如果也经过Zuul网关的代理,文件就会经过多次网路传输,造成不必要的网络负担。在高并发时,可能导致网络阻塞,Zuul网关不可用。这样我们的整个系统就瘫痪了。

所以,我们上传文件的请求就不经过网关来处理了。

zuul:prefix: /api # 添加路由前缀routes:item-service: /item/**  #给ly-item-service[item-service]设置网关;商品微服务的映射路径upload-service:path: /upload/**serviceId: upload-servicestrip-prefix: false #去掉upload前缀,上传图片时路径只有一个upload,而Controller中有了一个,因此要去掉一个ignored-services:- upload-service # 忽略upload-service服务

2.在Nginx反向代理上。我们修改nginx配置,将以/api/upload开头的请求拦截下来,转交到真实的服务地址:

    server {listen       80;server_name  api.dida.com;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 上传路径的映射location /api/upload {    #把本地端口写上proxy_pass http://192.168.x.xxx:8082;proxy_connect_timeout 600;proxy_read_timeout 600;#用笔记上的重写路径,不要加/zuulrewrite "^/api/(.*)$" /$1 break; #rewrite "^/api/(.*)$" /zuul/$1; 这个是老师在视频上写的方式带有/zuul,但写了会报错找不到这个路径/zuul/upload/image路径}

3.重启nginx(不用进入指定目录)命令:    nginx -s reload,再次上传图片,发现报错了:

如果出现跨域问题就在upload-service中添加一个CorsFilter即可,把GlobalCorsConfig.java复制到config包下即可。

@Configuration
public class GlobalCorsConfig {@Beanpublic CorsFilter corsFilter() {//1.添加CORS配置信息CorsConfiguration config = new CorsConfiguration();//1) 允许的域,不要写*,否则cookie就无法使用了config.addAllowedOrigin("http://manage.leyou.com");//2) 是否发送Cookie信息config.setAllowCredentials(false);//3) 允许的请求方式config.addAllowedMethod("OPTIONS");config.addAllowedMethod("POST");config.addAllowedHeader("*");//2.添加映射路径,我们拦截一切请求UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();configSource.registerCorsConfiguration("/**", config);//3.返回新的CorsFilter.return new CorsFilter(configSource);}

4.到了最坑人的一步了:把FDFS安装好了,后台代码也写完了,判断上传图片是否符合要求的代码跟着视频也写了,结果老师的没出问题,自己的出错了。这时候你看LyuploadApplication:8082的控制台窗口,发现有个空指针异常,就是因为跟着视频敲的判断语句写错了(到现在我还不知道错到哪了)。

我们要做的就是不使用视频中使用yml文件中配置的属性来校验文件类型,而用CONTENT_TYPES常量来判断。

把红色框中判断语句改成绿色框中的语句。

不想自己敲就找到我说的语句进行复制。

@Service
@Slf4j
//在上传时如何用定义在yml中的属性?-用@EnableConfigurationProperties注解注入
@EnableConfigurationProperties({UploadProperties.class})    //调用yml中抽取出来的可变参数
public class UploadService {@Autowiredprivate FastFileStorageClient storageClient;//FDFS自带的@Autowiredprivate UploadProperties prop;  //自定义在yml中配置的属性,【只能使用baseUrl属性,allowType用不了】private static final List<String> CONTENT_TYPES = Arrays.asList(MimeTypeUtils.IMAGE_JPEG_VALUE, MimeTypeUtils.IMAGE_PNG_VALUE);public String uploadImage(MultipartFile file){try {//上传前校验文件类型String contentType = file.getContentType();if (!CONTENT_TYPES.contains(contentType)) {throw new DDException(ExceptionEnum.INVALID_FILE_TYPE);//无效的文件类型}/*  if (!prop.getAllowType().contains(contentType)){    //调用UploadProperties中的属性【在yml中配置的属性】  【用这个方法会报错】throw new DDException(ExceptionEnum.INVALID_FILE_TYPE);}*///校验文件内容,使用ImageIo流如果不是图片就返回空BufferedImage image = ImageIO.read(file.getInputStream());if (image==null){throw new DDException(ExceptionEnum.INVALID_FILE_TYPE);}//上传到FastDFSString extension= StringUtils.substringAfterLast(file.getOriginalFilename(),".");//代替上一句System.out.println("文件后缀名:"+extension);StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), extension, null);//uploadFile(文件流,文件大小,文件后缀名)//2.返回路径(域名)return prop.getBaseUrl()+storePath.getFullPath();//prop.getBaseUrl()=="http://image.dida.com/"} catch (IOException e) {//上传失败,记录日志并抛出异常log.error("[文件上传] 上传文件失败!",e);throw new DDException(ExceptionEnum.UPLOAD_FILE_ERROR);}}
}

这样FDFS上传文件的功能就大功告成了。。。。。我太难了!!!

有不清楚的可以在参考这个博客:https://blog.csdn.net/qpc672456416/article/details/80510462

问题6:微服务间调用异常、feign.FeignException: status 404 reading GoodsClient#querySkuBySpuId(Long)

解决:

这个问题可能是数据库表的数据不一致,比如某个spu下面,没有sku的数据,导致在通过spuId获取sku的集合时出现空指针异常,可以查询所有的spu,然后在遍历,获取没有skus集合的spu。

数据库重新导入一下数据就行了,前面做了新增spu的操作,但是没有添加对应的sku,这就解释了为什么querySkusBySpuId这一行报错。

如果是在测试的时候,导入索引数据的时候报错的话,可以直接在报错的地方trycatch,不影响后面的运行即可。先导入数据再说。如果是查询的话,那得将数据库的数据好好弄一下了。 do { // 查询spu信息 PageResult<Spu> result = goodsClient.querySpuByPage(page, rows, true, null); List<Spu> spuList = result.getItems(); if (CollectionUtils.isEmpty(spuList)) { break; } try { // 构建成goods List<Goods> goodsList = spuList.stream() .map(searchService::buildGoods).collect(Collectors.toList()); // 存入索引库 goodsRepository.saveAll(goodsList); } catch (Exception e) { }

乐优商城遇到的坑一步一步总结相关推荐

  1. 乐优商城(填坑)——后台登录

    后台管理模块增加登录验证,与门户网站一样都是采用无状态登录. 一.新增全局函数 在main.js中新增用户验证: 二.修改路由 先显示登录页面 效果: 三.解决cookie写入问题 在http.js中 ...

  2. 乐优商城遇到的坑(一)

    坑: 1.首先就是视频和笔记不匹配,视频上的配置文件,注解甚至是启动类都不一样,版本也不同,但是这些不同可以忍受: 2.Maven导入依赖总是报错,简直要崩溃了: 3.依赖无法下载,总是后缀lastu ...

  3. 乐优商城(填坑)——秒杀商品添加

    一.需求 后台商品管理中,将商品添加到可秒杀商品列表 选中商品将其设置为可秒杀. 选择具体的参与秒杀的商品规格,然后设置相关参数,点击保存即可. 二.后端接口修改 原来的添加秒杀商品接口在leyou- ...

  4. 学习乐优商城中遇到的坑

    本人暑假期间学习了乐优商城这个项目,历时二十天,遇到了许多的麻烦,应该会有挺多人遇到.所以想记录一下,让大家跳坑. 首先,我建议jar包的版本,都选择和老师的一样,不然会出现一些莫名奇妙的报错. 在本 ...

  5. 记录一次乐优商城踩的最大的坑!

    今天做到了乐优商城的day12天的leyou-search微服务,在执行测试程序"ElasticsearchTest"时报了这样的错误: 仔细对了一下代码,并没有什么错误,于是开始 ...

  6. 乐优商城(05)--商品管理

    乐优商城(05)–商品管理 一.导入图片资源 现在商品表中虽然有数据,但是所有的图片信息都是无法访问的,因此需要把图片导入到服务器中: 将images.zip文件上传至/leyou/static目录: ...

  7. 【javaWeb微服务架构项目——乐优商城day03】——(搭建后台管理前端,Vuetify框架,使用域名访问本地项目,实现商品分类查询,cors解决跨域,品牌的查询)

    乐优商城day03 0.学习目标 1.搭建后台管理前端 1.1.导入已有资源 1.2.安装依赖 1.3.运行一下看看 1.4.目录结构 1.5.调用关系 2.Vuetify框架 2.1.为什么要学习U ...

  8. 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能

    0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 源码笔记及资料: 链接:https://pan.baidu.com/s/1_opfL63P1pzH3rzLnbFiNw 提取码:v ...

  9. 乐优商城(四)商品规格管理

    文章目录 1. 商品规格 1.1 SPU 和 SKU 1.2 分析商品规格的关系 1.3 数据库设计 1.3.1 商品规格组表 1.3.2 商品规格参数表 2. 商品规格组 2.1 商品规格组前端 2 ...

最新文章

  1. 到底该不该从开发转测试
  2. jenkins即将重启问题
  3. h3c trunk口改access_H3C交换机二层应用及三层交换基本配置
  4. HA:HADOOP高可用机制
  5. 数据库设计系列[04]组织结构加入权限系统
  6. html——相对路径、绝对路径(有待补充....)
  7. 定时器实现原理——时间轮
  8. 软件智能:aaas系统设计概要 之 序 结篇:计算的三位一体主义
  9. CSS的border属性绘制简单三角形、边框三角形
  10. 云原生小课堂 | Envoy请求流程源码解析(一):流量劫持
  11. 使用TensorFlow调用PTB数据集并且搭建基于LSTM的PTB语言模型
  12. linux初学习题五显示系统时间现实格式为:小时/分钟/秒AM/PM!
  13. LeetCode 881. 救生艇
  14. 泛型和容器--2--容器
  15. 4.目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还可能会延误抢救时机。
  16. 微信小程序云开发完整案例
  17. ORB-SLAM2-----Frame()
  18. springboot集合MySQL删除_SpringBoot集成Spring JdbcTemplate并完成增删改查操作
  19. 羊了个羊源码H5,TypeScript,LAYA引擎
  20. 这款神奇的云端电脑可让你少装十几个软件

热门文章

  1. 【转贴】古代四大名琴
  2. OpenCV 计算fps(frames per second-fps)
  3. 我实现的一些Abp模块
  4. 用 typescript 做一个贪吃蛇小游戏
  5. 「云计算」全球最大的5家云计算公司
  6. 仅300员工却垄断全球,几亿一台还供不应求
  7. beego框架-logs模块学习笔记
  8. mysql 创建表 create table详解
  9. PS初体验:熟悉快捷键
  10. 深度学习优化算法的总结与梳理(从 SGD 到 AdamW 原理和代码解读)