1184 字
6 分钟
用户中心项目总结
2024-01-22

第一天#

  1. ant design pro 初始化命令有更新,如下:

    npm i @ant-design/pro-cli -g
    pro create myapp
    

    Alt text

  2. umi ui 安装命令不再在ant design pro使用手册显示,命令如下:

    yarn add @umijs/preset-ui -D
    

    img

  3. spring initializr 不再支持java8,更换新建项目页面的服务器为阿里巴巴国内源,如下:

    https://start.aliyun.com/
    

    img

  4. 后端名词解释 img

  5. MyBatis-Plus测试类问题

    • junit包的Test跟springboot没有直接的联系,所以需要使用RunWith来指定。

    • 如果引入的是import org.junit.Test;则需要添加@RunWith(SpringRunner.class), img

    • 如果引入的是import org.junit.jupiter.api.Test;则无需添加,直接使用@SpringBootTest注解 img

第二天#

  1. 设计数据库

    • 不要过度设计,允许开发过程中插入字段,但不要删除,尽量减少数据库修改

    • 使用逻辑删除方便数据找回

      image-20240104093917360

    • TRUNCATE 清空表数据

  2. mybatis-plus默认开启驼峰下划线转换,如需关闭需要在application文件中添加

    mybatis-plus:
      configuration:
        map-underscore-to-camel-case: false
    

    image-20240104112922686

第三天#

  1. 请求参数很长,或者不知道多长时不建议用get

  2. @RestController 适用于编写restful风格的api,返回值默认为json类型

  3. 生成序列化UID没有选项,在如下菜单解决

    image-20240105111347202

  4. controller层倾向于对请求参数本身校验,不涉及业务逻辑本身(越少越好),service层是对业务逻辑的校验(有可能被controller之外的调用)

第四天#

  1. logo

    125767990_0_final

  2. 解决跨域问题,使用代理

    image-20240106153800583

    之后,写所有api请求的时候都要加上/api前缀

    image-20240106153932942

  3. 虽然定义了LoginParams的类型,但是发给后台的并不是定义的类型,需要手动更改name字段。ts的定义可以理解为加一个语法提示。

    image-20240106155452475

    image-20240106155513567

  4. 最终完成,拿到数据

    image-20240106155554309

第五天#

  1. 用户头像

    yvjing

  2. 更改AvatarDropdown.tsx中对应的字段后头像不显示的原因是,账号数据是有的,但对应的用户昵称的数据为空,加上后成功加载出来

    image-20240107194003528

  3. 当页面显示不全时,有可能是路由的问题。

  4. 写api接口时,这两处要对应

    image-20240107203416123

  5. 阶段性完成(调整行同高度后没有头像的会出现一个不好看的图标,就又返回原来了):

    image-20240107205724774

第六天#

  1. @TableLogic注解表示该字段是标识逻辑删除。

    image-20240109123851781

  2. 后端优化:

    1. 通用返回对象

    2. 封装全局异常处理

    3. 全局请求日志和登录校验

    4. 结构

      image-20240110200302593

  3. 前端优化

    1. 全局相应处理器参考https://blog.csdn.net/huantai3334/article/details/116780020

    2. image-20240110200331458

    3. /**
       * request 网络请求工具
       * 更详细的 api 文档: https://github.com/umijs/umi-request
       */
      import {extend} from 'umi-request';
      import {message} from "antd";
      import {history} from "@@/core/history";
      import {stringify} from "querystring";
      
      /**
       * 配置request请求时的默认参数
       */
      const request = extend({
        credentials: 'include', // 默认请求是否带上cookie
        // requestType: 'form',
      });
      
      /**
       * 所有请求拦截器
       */
      request.interceptors.request.use((url, options): any => {
        console.log(`do request url = ${url}`)
        return {
          url,
          options: {
            ...options,
            headers: {},
          },
        };
      });
      
      /**
       * 所有响应拦截器
       */
      request.interceptors.response.use(async (response, options): Promise<any> => {
        const res = await response.clone().json();
        if (res.code === 0) {
          return res.data;
        }
        if (res.code === 40100) {
          message.error("请先登录")
          history.replace({
            pathname: '/user/login',
            search: stringify({
              redirect: location.pathname,
            }),
          });
        } else {
          message.error(res.description)
        }
        return res.data;
      });
      
      export default request;
      

第七天#

  1. exportStatic静态化配置,配置后bulid后会给每个目录生成静态化页面。

    image-20240113112452971

  2. 服务器安装nginx,运行时注意权限。

    image-20240113155929163

  3. mvn package -DskipTests

    编译打包配置,跳过测试。

    image-20240113181958194

  4. 成功启动

    image-20240113181935095

  5. nginx -s reload 重启nginx服务

  6. nohup java -jar /project/user-center-backend/user-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &
    

    后台启动后端项目,nohup与&要一起用

    image-20240113195608941

  7. 后端运行输入地址时要注意url路径、

    image-20240113201511140

  8. 宝塔面板部署网站后,如果没有反应,查看nginx配置,放行相应端口。

  9. 跨域问题nginx网关配置

    location ^~ /api/ {
        proxy_pass http://127.0.0.1:8080/api/;
        add_header 'Access-Control-Allow-Origin' $http_origin;
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers '*';
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Origin' $http_origin;
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }
    

    注:配置添加到前端网站项目的配置文件就可以实现跨域解决

  10. 本地登录成功不跳转问题

image-20240119185827424

选用了自己写的全局request请求文件,可能某些地方配置错误,暂时改回umi自动生成的request请求文件。

  1. 用户管理表格加载错误,数据类型不匹配:

image-20240119191003895

原因前后端search方法的类型不同,将其更改一致: 后端UserController.java

image-20240119191043483

前端UserManage/index.tsx

image-20240119223813357

前端api.ts

image-20240119223840845

  1. 登录成功后页面不跳转问题:

    检查app.tsx的fetchUserInfo函数,发现返回类型不对应

    修改后:

    image-20240119224129989

    修改前:

    image-20240119224303096

    顺带查看一下api文件下的currentUser函数:

  2. 如果遇到请求地址不正确,尝试清除浏览器缓存刷新,以及遇到无法读取数据库的,重启nginx或者Java后端即可。

用户中心项目总结
https://lym0518.cn/posts/usercenter/
作者
TeFantasy
发布于
2024-01-22
许可协议
CC BY-NC-SA 4.0