柚见(伙伴匹配系统)第五期

后端个人信息接口

前端修改用户信息,点击提交;现在无法对接到后端,需要在后端新写一个接口/user/update。

控制层新增用户信息更新接口。
在这里插入图片描述
在这里插入图片描述

HttpServetRequest request:
前端的请求头中获取cookie,在后端查询登录态进行鉴权

User getLoginUser(HttpServetRequest request)

在这里插入图片描述

前端对接

登录

Vant 3 - Lightweight Mobile UI Components built on Vue (vant3-form表单)

发现打开金狮播放器,电脑的复制粘贴就出错了,服了

  1. 新建登录页面
  2. 添加路由
  3. 数据响应时获取data。
  4. 访问自己登录的路由地址。http://127.0.0.1:5173/#/user/ogin

bug: 400错误

在这里插入图片描述

解决
在这里插入图片描述

在这里插入图片描述

bug:
vant报错 Uncaught TypeError: Toast is not a function_typeerror: util.showerrortoast is not a function-CSDN博客

bug:按照上述文章改后 引入toast提示样式不生效
在这里插入图片描述
在这里插入图片描述

bug: 但是成功登录后没有 cookie未成功种下
可能是因为跨域
在这里插入图片描述
稍后解决

const onSubmit = async (values) => {  
  const res =await myAxios.post("/user/login",{  
    password:password.value,  
    userAccount:userAccount.value  
    })  
  
  if(res.code===0 && res.data)  
  {  
    showSuccessToast("登录成功")  
  
    //登录成功跳转路由-- 回到主页  
    // router.push('/');  
    await router.replace("/");  
  
  }else{  
    showFailToast("登陆失败")  
  }  
  
}

用户信息获取

在用户个人信息页面上调取后端接口获取用户的信息。

//向后端发请求获取真数据  
const  user=ref();  
  
onMounted(async ()=>{  
  const res= await myAxios.get("user/current")  
  if(res.data && res.code===0)  
  {  
    showSuccessToast("获取用户信息成功")  
    user.value=res.data;  
  }else{  
    showFailToast("获取用户信息失败")  
  }  
})

在这里插入图片描述

在这里插入图片描述

种cookie

前端: 在全局的axios开启cookie配置,使得请求头中携带cookie

axios+vue 请求时如何携带cookie_vue axios cookie-CSDN博客

在这里插入图片描述

后端设置cookie允许在哪个域名下可携带。
(便于之后共享cookie)

server:  
port: 8080  
servlet:  
context-path: /api  
session:  
cookie:  
domain: localhost

用户信息修改

然后我们再回到最上面,用户信息修改。(这里一般情况下都会有点小问题。)

在这里插入图片描述

在这里插入图片描述

提取公共方法,将获取当前对象的方法实现封装

新建文件夹services,新建文件user.ts (访问后端获取,当前用户的信息。单独提取出来使用。然后通过get方法获取到想要的信息。)

import myAxios from "../plungins/myAxios.js";  
import { setCurrentUserState} from "../states/user.ts";  
  
export const getCurrentUser=async ()=>{  
  
    // const currentUser=getCurrentUserState();  
    // if(currentUser)    // {    //     return currentUser;    // }    //缓存还需要更新,麻烦  
    //当系统访问量不大的时候就 直接钩子函数每次刷新页面更新最新的数据  
  
    //不存在,则从远程获取当前对象  
    const res= await myAxios.get("user/current");  
    if(res.code === 0)  
    {  
        setCurrentUserState(res.data);  
        return res.data;  
    }  
  
    return null;  
  
}

在这里插入图片描述

实现一次访问,前端缓存当前用户的信息,之后再用到就从缓存中取,减少访问数据库次数

在这里插入图片描述

新建states文件夹,新建user.ts (创建一个方法可获取到的用户信息。相当于java中的get/set,然后全局都可以调用这个方法来获取当前用户的状态数据。)

在这里插入图片描述

然后是user.vue 页面的修改
在这里插入图片描述

await,异步方法,使用拿到的是promise对象

  
  
<template>  
  <template v-if="user">  
    <van-cell title="昵称" is-link @click="toEdit('username','昵称',user.username)" :value="user.username" />  
    <van-cell title="账户" is-link @click="toEdit('userAccount','账户',user.userAccount)" :value="user.userAccount"/>  
    <van-cell title="头像">  
      <img style="height: 48px;" :src="user.avatarUrl">  
    </van-cell>    <van-cell title="性别" is-link @click="toEdit('gender','性别',user.gender)" :value="user.gender"/>  
    <van-cell title="电话" is-link @click="toEdit('phone','电话',user.userPhone)" :value="user.userPhone"/>  
    <van-cell title="邮箱" is-link @click="toEdit('email','邮箱',user.email)" :value="user.email"/>  
    <van-cell title="星球编号" :value="user.planetCode"/>  
    <van-cell title="注册时间" :value="user.createTime"/>  
  </template>  
</template>  
  
<script setup>  
import {useRouter} from "vue-router";  
import {onMounted, ref} from "vue";  
  
import {showFailToast, showSuccessToast} from "vant";  
import {getCurrentUser} from "../services/user.ts";  
import {setCurrentUserState} from "../states/user.ts";  
  
  
//点击路由跳转  
//1.创建路由对象  
const router = useRouter();  
//2.路由跳转函数  
const toEdit=(editKey,editName,currentValue)=>{  
  router.push({  
    path:'/user/edit',  
    query:{  
      editKey,  
      editName,  
      currentValue,  
    }  
  })  
  
}  
  
  
//假数据模拟  
// const user={  
//   id: 789,  
//   userAccount: "963",  
//   username: "lxy11",  
//   phone: "13625635478",  
//   createTime: new Date(),  
//   email: "lxy11@123.com",  
//   avatarUrl: "https://pic.imgdb.cn/item/65b8f58d871b83018a468905.png",  
//   gender: '女',  
//   planetCode: "963"  
// }  
  
//向后端发请求获取真数据  
const  user=ref();  
  
onMounted(async ()=>{  
  const res= await getCurrentUser();  
  if(res)  
  {  
    user.value=res;  
    showSuccessToast("获取用户信息成功")  
  }else{  
    showFailToast("获取用户信息失败")  
  }  
})  
  
</script>  
<style scoped>  
  
</style>

UserEditPage.vue页面修改
在这里插入图片描述

<script setup>  
import {ref} from 'vue'  
import {useRoute, useRouter} from "vue-router";  
import myAxios from "../plungins/myAxios.js";  
import {showFailToast, showSuccessToast} from "vant";  
import {getCurrentUserState} from "../states/user.ts";  
import {getCurrentUser} from "../services/user.ts";  
  
  
const route = useRoute();  
const router=useRouter();  
  
const editUser=ref({  
  editKey:route.query.editKey,//gender  
  currentValue:route.query.currentValue,//'女'  
  editName:route.query.editName,//'性别'  
})  
const onSubmit = async (values) => {  
  //向后端发请求获取真数据  
  // const  user=await getCurrentUser();  
  
  // 获取当前用户  
  let user=await getCurrentUserState();  
  
  //如果在当前页面刷新,user=null,why  
  if(!user)  
  {  
    user=await getCurrentUser();  
  }  
  
  //使用axios向后端发起请求  
  const res = await myAxios.post("/user/update",{  
    //还未实现登录,使用默认id  
    //'id':1,    'id':user.id,  
    //[] 语法,将其括起来,不用写死,可以传递变量  
    [editUser.value.editKey]: editUser.value.currentValue  
  })  
  
  if(res.data>0 && res.code===0)  
  {  
    showSuccessToast("修改成功")  
    //返回上一页  
    router.back();  
  }else{  
    showFailToast("修改失败")  
  }  
  
};  
  
  
  
</script>  
<template>  
  <van-form @submit="onSubmit">  
    <van-cell-group inset>  
      <van-field          v-model="editUser.currentValue"  
          :name="editUser.editKey"  
          :label="editUser.editName"  
         :placeholder="`请输入${editUser.editName}`"  
      />  
  
    </van-cell-group>    <div style="margin: 16px;">  
      <van-button round block type="primary" native-type="submit">  
        提交  
      </van-button>  
    </div>  </van-form>  
</template>  
  
<style scoped>  
  
 </style>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/393649.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

化繁为简!用pytest编写接口自动化测试脚本的简易思路

引言 当今互联网时代&#xff0c;软件质量成为越来越重要的一个问题&#xff0c;而接口自动化测试是保障软件质量的一种关键手段。 在这个过程中&#xff0c;pytest成为了许多开发者的首选工具&#xff0c;既易于使用&#xff0c;又具有强大的功能。但是&#xff0c;对于初学…

C/C++ BM8 链表中倒数最后k个结点

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 解决方案二2.1 思路阐述2.2 源码 总结 前言 这道题和BM1中的思路有些许类似&#xff0c;整体不难。 题目 描述 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为 ai &#xff0c;返回该链表中倒数第k个节点。 如果…

three.js 物体下落动画(重力加速度)

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><el-button click"loopFun"> 物体下落…

效果图渲染为什么找「瑞云渲染」瑞云渲染邀请码WFQB

效果图的渲染可以通过个人的电脑&#xff0c;也可以通过第三方的云渲染平台&#xff0c;两者之间的区别很多人都知道是什么。如果用户需要使用个人电脑&#xff0c;通常需要搭配高性能的硬件&#xff0c;然而硬件中最贵的当数CPU、GPU&#xff0c;云渲染平台则是通过租用高配置…

day6:继承与多态

思维导图 2.编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a;比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff…

Win32汇编数组学习2

之前学习过win32汇编数组&#xff1b;还不熟悉&#xff1b;继续熟悉&#xff1b; 先做几个基本的对话框&#xff0c;有一个静态文本框&#xff1b; 定义数组之后&#xff0c;用 wsprintf 函数格式化&#xff0c;然后调用 SetDlgItemText 赋值给静态文本框&#xff1b; arr1 …

[C++]二叉搜索树

一、定义 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值它的左右子树也分别…

深入浅出熟悉OpenAI最新大作Sora文生视频大模型

蠢蠢欲动&#xff0c;惴惴不安&#xff0c;朋友们我又来了&#xff0c;这个春节真的过的是像过山车&#xff0c;Gemini1.5 PRO还没过劲&#xff0c;OpenAI又放大招&#xff0c;人类真的要认输了吗&#xff0c;让我忍不住想要再探究竟&#xff0c;到底是什么让文生视频发生了质的…

C语言—指针

碎碎念:做指针题的时候我仿佛回到了原点&#xff0c;总觉得目的是为了把框架搭建起来&#xff0c;我胡说的哈31 1.利用指针变量将一个数组中的数据反向输出。 /*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h> #include <time.h> #include <…

常用类与基础API-String的理解和不可变性

1.String类的理解 1.1类的声明 public final class String >final &#xff1a;String是不可继承的。 >Serializable :可序列化的接口,凡是实现此接口的类的对象就可以通过网络或本地流进行数据的传输 >comparable:凡是实现此接口的类,其对象都可以比较大小. 1.…

【MySQL】多表关系的基本学习

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-3oES1ZdkKIklfKzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

基于8086单片机的数码管计时系统[proteus仿真]

基于8086单片机的数码管计时系统[proteus仿真] 8086仿真设计这个题目算是课程设计中常见的题目了&#xff0c;本期是一个基于8086单片机的数码管计时系统[proteus仿真] 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&a…

Fiddler抓包(网页、手机、MUMU模拟器)

前置条件&#xff1a;电脑上下载安装好了Fiddler&#xff0c;有浏览器 一、网页抓包 1、fiddler下载安装证书 Tools-Options 勾选下面两个框 点击下面的选项&#xff0c;信任证书 会弹出弹窗&#xff0c;点击yes&#xff08;这个时候注意&#xff0c;DO_NOT_TRUST_FiddlerRo…

防御保护第五次作业

1,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) FW5&#xff1a; 2,分公司设备可以通过总公司的移动链路和电信链路访问到DMz区的http服务器 FW5&#xff1a; 注&#xff1a;记得通过安全策略放行 分公司FW3 注意&#xff1a…

Open CASCADE学习|曲线向曲面投影

在三维空间中&#xff0c;将曲线向曲面投影通常涉及复杂的几何计算。这个过程可以通过多种方法实现&#xff0c;但最常见的是使用数学和几何库&#xff0c;如OpenCASCADE&#xff0c;来处理这些计算。 在OpenCASCADE中&#xff0c;投影曲线到曲面通常涉及以下步骤&#xff1a;…

【plt.bar绘制条形图】:从入门到精通,只需一篇文章!【Matplotlib】

【&#x1f4ca;plt.bar绘制条形图】&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;【Matplotlib】 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; &#x1f50d; 一、初识plt.bar&#xff1a;条形图的基本概念&#x1f4a1; 二、plt.…

Spring Boot 笔记 025 主界面

1.1 路由搭建 1.1.1 安装vue router npm install vue-router4 1.1.2 在src/router/index.js中创建路由器&#xff0c;并导出 import { createRouter, createWebHistory } from vue-router//导入组件 import LoginVue from /views/Login.vue import LayoutVue from /views/La…

Eliminating Domain Bias for Federated Learning in Representation Space【文笔可参考】

文章及作者信息&#xff1a; NIPS2023 Jianqing Zhang 上海交通大学 之前中的NeurIPS23论文刚今天传到arxiv上&#xff0c;这次我把federated learning的每一轮看成是一次bi-directional knowledge transfer过程&#xff0c;提出了一种促进server和client之间bi-direction…

【机构vip教程】Requests(1):Requests模块简介与安装

Requests模块简介 在python的标准库中&#xff0c;虽然提供了urllib,utllib2,httplib&#xff0c;但是做接口测试&#xff0c;requests使用更加方便快捷&#xff0c;正如官方说的&#xff0c;“让HTTP服务人类”。 Requests是用python语言基于urllib编写的&#xff0c;采用的是…

【漏洞复现-通达OA】通达OA swfupload_new存在前台SQL注入漏洞

一、漏洞简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。通达OA为各行业不同规模的众多用户提供信息化管理能力,包括流程审批、行政办公、日常事务、数据统计…