用户中心项目总结(不完全踩坑记录)
#用户中心项目总结
花了两个星期大致完成了在星球的第一个项目,中间过了个年,鸽了好几天😢,下面分享一下个人的踩坑记录和一些心得。
因为之前没有用过类似的框架,这个项目的ant design pro前端属实让我琢磨了好一阵。
首先是跟着鱼皮大大安装初始化脚手架,创建前端项目。
Mybatis 新增用户时出现
java.sql.SQLSyntaxErrorException: Unknown column 'user_account' in
'field list'的bug,这是因为数据库字段没有下划线,mybatis默认会采用驼峰命名法,在配置关掉即可


然后还学会了通过idea自带的测试工具发送请求。
还有一个新的知识点(对我来说),
session的校验机制--HttpServletRequest request,详细可以看鱼总的视频。
之前数据库操作都是mybatis,这次运用了一些mybatis-plus的操作。如selectOne、removeByid等。
#bug
前端页面出现umibundling50%
error -
./src/.umi/core/route.tsx:109:23-115
Module
not found: Error: [CaseSensitivePathsPlugin] `D:\java\YUPI\用户中心\myapp\src\pages\User\register\index.tsx`
does not match the corresponding path on disk `Register`
错误信息中提到的路径是D:\java\YUPI\用户中心\myapp\src\pages\User\register\index.tsx,而对应的路径名应该是Register。根据错误信息,可以猜测是因为路径大小写不匹配导致了这个错误。
后端
控制台输出报错:Note: further occurrences of
HTTP request parsing errors will be logged at DEBUG level.
看来是在解析HTTP请求行时出现了问题。具体地,错误消息指出在方法名中发现了无效字符,导致无法正确解析HTTP请求。
根据HTTP协议规范,HTTP方法名必须是令牌(token),也就是说,它们必须由ASCII可打印字符组成,且不能包含空格或特殊字符。
所以在vscode全局搜索token,找到应该是requestErrorConfig这里,注释掉

然后还是报一样的错:
Note: further
occurrences of HTTP request parsing errors will be logged at DEBUG level.
发现原来是在proxy.ts这里http后多加了“s”,删掉后问题解决

复现3.25笔记时出现了bug:子路由无法渲染出来。
找了很久,折腾了好久呜呜呜,在github的issue区🧐[问题 | question] 子路由渲染问题 · Issue #11142 ·
ant-design/ant-design-pro · GitHub找到答案,
只需要在父级路由使用<Outlet/>渲染子路由,手动导入'umi',即可成功渲染出右侧./Admin/UserManage

部署时,我尝试了从0到1和宝塔两种方式,特别是第一种,中间遇到了很多问题,比如

修改url为url: jdbc:mysql://120.26.218.238:3306/user_center,然后重新package打成jar包即可。
部署前端时遇到一些端口问题,知道网站默认端口号是80,要改成自己在nginx.conf设置的端口号,才可以正确渲染。可以参考这篇文章:
https://ww.dandelioncloud.cn/article/details/1510953291075932161
后端部署安装java,参考
然后就是结合大大们的笔记和视频
不过有个疑问:进程进行中,当然可以连接到后端,如果服务器开着,但是没有人为执行进程,也可以正常连接到后端吗?
##宝塔部署
在添加站点,输入网址出现bug

Npm run build 构建前端项目
找了一通发现原来是上传dist文件时出错,应该上传dist文件夹内的所有文件,不用把dist这个文件夹也上传。
部署后端时,有个现象让我百思不得其解,有懂的小伙伴麻烦告诉我!!!感谢!
这个是在本地vscode运行的,直接发送请求给后端了,相当于postman,但是端口号理论上应该是8989(我后端端口号是8989),而不是8000(居然也能成功获得返回结果)!?

部署前端时,直接输入公网ip可以渲染出界面,但是刷新一下或者手动输入/user/login,则会报错404 Not found
在配置文件加入以下代码
- location / {
- try_files $uri $uri/ @router;
- index index.html;
- }
- location @router {
- rewrite ^.*$ /index.html last;
- }
则不会出现以上问题辣。
##docker安装镜像
Docker部署
在宝塔安装docker后,
在后端新建Dockerfile文件(鱼皮大大版本)
FROM
maven:3.5-jdk-8-alpine as builder
# Copy local code to
the container image.
WORKDIR /app
COPY pom.xml .
COPY src ./src
# Build a release
artifact.
RUN mvn package
-DskipTests
# Run the web
service on container startup.
CMD
["java","-jar","/app/target/user-center-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
然后重新git上传后,宝塔终端拉下来

但是部署后查不到对应的docker,或者说报错了应该是maven的问题
找不到解决方案后我重新找了一份dockerfile文件
FROM
openjdk:8-jdk-alpine
# Copy local code to
the container image.
WORKDIR /app
COPY
./target/user-center-0.0.1-SNAPSHOT.jar /app/user-center.jar
# Build a release
artifact.
EXPOSE 8989
# Run the web
service on container startup.
CMD
["java","-jar","user-center.jar","--spring.profiles.active=prod"]

构建成功!
这里我又遇到个bug

这应该是jdk版本问题 服务器java版本是jdk17

而我刚开始dockerfile中版本是jdk8,所以docker拉取不到java运行版本的镜像,所以更新dockerfile即可。
FROM openjdk:17-jdk-alpine
# Copy local code to
the container image.
WORKDIR /app
COPY
./target/user-center-0.0.1-SNAPSHOT.jar /app/user-center.jar
# Build a release
artifact.
EXPOSE 8989
# Run the web
service on container startup.
CMD
["java","-jar","user-center.jar","--spring.profiles.active=prod"]
测试一下,访问后端,成功

这里我又想向大佬们提问:
①宝塔面板需要在纯净环境下安装软件,那如果在服务器终端安装某些软件,那在宝塔软件商店也可以重复安装吗,会不会有冲突呢?
②还有宝塔面板的“安全“一栏,有显示开放的端口号,这和云服务器的安全组一致吗,服务器的防火墙所罗列的端口号又有什么关系呢



③部署前端时,我发现在前端的proxy,ts有对‘api’代理,但是宝塔的站点也有专门的反向代理,甚至可以在“配置文件”和“反向代理”一栏更改,那会不会冲突呢?
以上不完全记录,感谢大家浏览,大家晚安!
#用户中心项目 #项目总结
