乐优商城遇到的坑一步一步总结
问题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) { }
乐优商城遇到的坑一步一步总结相关推荐
- 乐优商城(填坑)——后台登录
后台管理模块增加登录验证,与门户网站一样都是采用无状态登录. 一.新增全局函数 在main.js中新增用户验证: 二.修改路由 先显示登录页面 效果: 三.解决cookie写入问题 在http.js中 ...
- 乐优商城遇到的坑(一)
坑: 1.首先就是视频和笔记不匹配,视频上的配置文件,注解甚至是启动类都不一样,版本也不同,但是这些不同可以忍受: 2.Maven导入依赖总是报错,简直要崩溃了: 3.依赖无法下载,总是后缀lastu ...
- 乐优商城(填坑)——秒杀商品添加
一.需求 后台商品管理中,将商品添加到可秒杀商品列表 选中商品将其设置为可秒杀. 选择具体的参与秒杀的商品规格,然后设置相关参数,点击保存即可. 二.后端接口修改 原来的添加秒杀商品接口在leyou- ...
- 学习乐优商城中遇到的坑
本人暑假期间学习了乐优商城这个项目,历时二十天,遇到了许多的麻烦,应该会有挺多人遇到.所以想记录一下,让大家跳坑. 首先,我建议jar包的版本,都选择和老师的一样,不然会出现一些莫名奇妙的报错. 在本 ...
- 记录一次乐优商城踩的最大的坑!
今天做到了乐优商城的day12天的leyou-search微服务,在执行测试程序"ElasticsearchTest"时报了这样的错误: 仔细对了一下代码,并没有什么错误,于是开始 ...
- 乐优商城(05)--商品管理
乐优商城(05)–商品管理 一.导入图片资源 现在商品表中虽然有数据,但是所有的图片信息都是无法访问的,因此需要把图片导入到服务器中: 将images.zip文件上传至/leyou/static目录: ...
- 【javaWeb微服务架构项目——乐优商城day03】——(搭建后台管理前端,Vuetify框架,使用域名访问本地项目,实现商品分类查询,cors解决跨域,品牌的查询)
乐优商城day03 0.学习目标 1.搭建后台管理前端 1.1.导入已有资源 1.2.安装依赖 1.3.运行一下看看 1.4.目录结构 1.5.调用关系 2.Vuetify框架 2.1.为什么要学习U ...
- 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能
0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 源码笔记及资料: 链接:https://pan.baidu.com/s/1_opfL63P1pzH3rzLnbFiNw 提取码:v ...
- 乐优商城(四)商品规格管理
文章目录 1. 商品规格 1.1 SPU 和 SKU 1.2 分析商品规格的关系 1.3 数据库设计 1.3.1 商品规格组表 1.3.2 商品规格参数表 2. 商品规格组 2.1 商品规格组前端 2 ...
最新文章
- 到底该不该从开发转测试
- jenkins即将重启问题
- h3c trunk口改access_H3C交换机二层应用及三层交换基本配置
- HA:HADOOP高可用机制
- 数据库设计系列[04]组织结构加入权限系统
- html——相对路径、绝对路径(有待补充....)
- 定时器实现原理——时间轮
- 软件智能:aaas系统设计概要 之 序 结篇:计算的三位一体主义
- CSS的border属性绘制简单三角形、边框三角形
- 云原生小课堂 | Envoy请求流程源码解析(一):流量劫持
- 使用TensorFlow调用PTB数据集并且搭建基于LSTM的PTB语言模型
- linux初学习题五显示系统时间现实格式为:小时/分钟/秒AM/PM!
- LeetCode 881. 救生艇
- 泛型和容器--2--容器
- 4.目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还可能会延误抢救时机。
- 微信小程序云开发完整案例
- ORB-SLAM2-----Frame()
- springboot集合MySQL删除_SpringBoot集成Spring JdbcTemplate并完成增删改查操作
- 羊了个羊源码H5,TypeScript,LAYA引擎
- 这款神奇的云端电脑可让你少装十几个软件