全栈业务开发入门——登录业务接口

业务已上传则资源

实现登录业务的前后端联调,前端点击登录按钮向后端发送一个请求,后端调用接口向前端响应结果

效果如下:

设计环境:springboot+mybatis+vue3+axios

一.前端设计

1.基于vue3脚手架创建项目,搭建项目结构

2.配置代理(处理跨域问题)

由于发起ajax请求的域为http://localhost:5173, 而后台服务器的域为 http://localhost:8080, 所以浏览器会限制该请求的发送, 这种问题称为跨域问题, 跨域问题可以在服务器端解决,也可以在浏览器端解决, 这可以通过配置代理的方式解决

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}},//配置代理server: {proxy: {'/api': {target: 'http://localhost:8080', // 后端服务器地址changeOrigin: true, // 是否改变请求域名rewrite: (path) => path.replace(/^\/api/, '')//将原有请求路径中的api替换为''}}}
})

3.搭建登录页面组件

首先搭建页面组件,将进行数据双向绑定

import { ref } from 'vue'
const LogData = ref({username: '',password: ''
})

当点击登录按钮时,就会调用login函数向后端发送请求

<div class="box"><form action="" :model="LogData">用户名:<input type="text" v-model="LogData.username"><br><br>密码:<input type="text" v-model="LogData.password"><br><br><button type="button" @click="login">登录</button></form></div>
.box{width: 400px;height: 200px;background-image: url('@/assets/login_bg.jpg');text-align: center;margin: 50px auto;padding: 40px;
}

4.提供调用登录接口的函数

首先根据axios提供共用的响应拦截器

//导入axios
import axios from 'axios';
const baseURL = '/api';
const instance = axios.create({baseURL})//添加响应拦截器
instance.interceptors.response.use(result=>{return result.data;},err=>{alert('服务异常');return Promise.reject(err);//异步的状态转化成失败的状态}
)export default instance;

然后提供调用登录接口的函数

//导入request.js请求工具
import request from '@/utils/request.js'//提供调用登录接口的函数
export const userLoginService = (loginData)=>{const params = new URLSearchParams();for(let key in loginData){params.append(key,loginData[key])}return request.post('/user/login',params)
}

最后写出点击登录后的调用函数并完成响应

//调用后台接口,完成登录
import { userLoginService} from '@/api/user.js'
const login = async () => {let result = await userLoginService(LogData.value);if (result.code === 0) {//成功了alert(result.msg ? result.msg : '登录成功');}else{//失败了alert('登录失败')} 
}

二.后端设计

1.基于springboot创建项目,引入web,mybatis,lombok依赖,并进行数据库连接信息和mybatis配置

2.创建数据库表并写出对应的实体类

数据库tb_user表中只含有username和password两列

3.搭建登录接口

请求路径为:https://localhost:8080/user/login

请求方式:POST

请求参数格式:x-www-form-urlencoded

请求数据样例:

username=zhangsan&password=123456

首先controller层接受请求并响应

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/login")public Result<String> login(@RequestParam String username, @RequestParam String password){log.info("用户登录:{},{}",username,password);User user=new User(username,password);User u=userService.login(user);return u==null?Result.error("登录失败"):Result.success("登录成功");}
}

然后service层进行业务处理

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User login(User user) {return userMapper.login(user);}
}

最后mapper层调用数据库并返回结果

@Mapper
public interface UserMapper {@Select("select * from db01_ms.tb_user where username=#{username} and password=#{password}")public User login(User user);
}

三.前后端联调

首先前端发送请求

然后后端调用接口,进行数据库访问

最后前端接收响应并进行反映

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LAZYNVIM学习使用笔记

文章目录 1. 前言VIM的模式快捷键参考 1. 前言 习惯使用vscode进行代码编辑&#xff0c;无意中刷到lazynvim&#xff0c;感觉功能强大&#xff0c;于是下载、安装&#xff0c;学习使用一下&#xff0c;本篇主要记录学习使用lazynvim的一些要点&#xff0c;防止遗忘。 持续更新…

帝特(DTECH)USB转RS485/422串口线在Ubuntu系统中的安装

因为测试需要&#xff0c;买了一根帝特&#xff08;DTECH&#xff09;USB转RS485/422串口线&#xff0c;今天测试了一下在Ubuntu 22.04系统上的使用。帝特的网站上提供了驱动程序&#xff0c;下载以后发现接口芯片是CP2102&#xff0c;厂商只提供了Linux内核2.6和3.x版本的驱动…

1703:发现它,抓住它

网址如下&#xff1a; OpenJudge - 1703:发现它&#xff0c;抓住它 测&#xff0c;这题差点让我去世 用了一堆方法来做 后面现学了并查集&#xff0c;用了并查集来做&#xff0c;因为缩短路径的方法不好&#xff0c;还是超时了 后面换了一种缩短路径的方法 先上代码 解法一…

游戏AI的创造思路-技术基础-情感计算(2)

上一篇我们介绍了情感计算的基本支持&#xff0c;本篇将呈现情感计算在游戏AI中的使用实例~~~ 目录 7. 情感计算在游戏AI中的运用实例 7.1. RPG游戏中的运用实例 7.1.1. 实例背景 7.1.2. AI情感计算系统 7.1.3. 引导用户执行任务 7.1.4. 推动游戏剧情发展 7.1.5. 实例效…

用Python玩转Excel的五大功能!

在日常的数据处理工作中&#xff0c;Excel无疑是一个强大的工具。然而&#xff0c;当数据量较大或需要自动化处理时&#xff0c;Python凭借其强大的库支持&#xff0c;如pandas和openpyxl&#xff0c;能够更高效地处理Excel文件。 本文将介绍Python中常用的五种Excel操作**&am…

一个用于在虚拟桌面下跑chrome的docker镜像

制作了一个用于跑chrome的docker镜像xvfb-chrome&#xff0c;主要是为了支持能够通过xvfb或者wayland&#xff0c;给chrome提供一个虚拟的桌面环境。 这个镜像主要支持&#xff1a; 将chrome --remote-debugging-port映射到docker的host&#xff0c;可以在host直接访问。支持…

Python办公自动化:增值税发票批量识别和核验

腾讯云免费体验地址: https://console.cloud.tencent.com/api/explorer?Product=ocr&Version=2018-11-19&Action=VatInvoiceVerifyNew 首先进行识别,这里以python为例子 # -*- coding: utf-8 -*- import jsonfrom tencentcloud.common.common_client import Commo…

【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树

目录 1 -> 红黑树 1.1 -> 红黑树的概念 1.2 -> 红黑树的性质 1.3 -> 红黑树节点的定义 1.4 -> 红黑树的结构 1.5 -> 红黑树的插入操作 1.6 -> 红黑树的验证 1.8 -> 红黑树与AVL树的比较 2 -> 红黑树模拟实现STL中的map与set 2.1 -> 红…

如何理解李彦宏说的“不要卷模型,要卷应用?

背景&#xff1a; 7月4日&#xff0c;2024世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海世博中心举办。在产业发展主论坛上&#xff0c;百度创始人、董事长兼首席执行官李彦宏呼吁&#xff1a;“大家不要卷模型&#xff0c;要卷应用&#xff01;”李彦宏认为&am…

【堆 优先队列】1354. 多次求和构造目标数组

本文涉及知识点 堆 优先队列 LeetCode1354. 多次求和构造目标数组 给你一个整数数组 target 。一开始&#xff0c;你有一个数组 A &#xff0c;它的所有元素均为 1 &#xff0c;你可以执行以下操作&#xff1a; 令 x 为你数组里所有元素的和 选择满足 0 < i < target.…

idea在选定范围搜索

idea在选定范围搜索 CtrlR 在IntelliJ IDEA中&#xff0c;‌如果你想在选定的范围内搜索关键字&#xff0c;‌可以按照以下步骤操作&#xff1a;‌ 首先&#xff0c;‌使用鼠标选中你要搜索关键字的一个范围。‌ 然后&#xff0c;‌使用快捷键CtrlR&#xff08;‌替换元素&am…

掌握JsonConvert.SerializeObject:美化输出与序列化对象的艺术

目录 引言 JsonConvert.SerializeObject简介 参数详解 使用示例 运行结果 结论 结语 引言 在现代软件开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;被广泛用于Web API、数据库存储以及跨平台数据传…

linux信息收集与提权

目录 版本信息收集 kali得一些exp网站 kali自带的searchsploit工具 脏牛提权漏洞&#xff08;改写没有写权限的文件&#xff09; 测试靶场下载链接 sudo提权 上传恶意C脚本进行编译生成dirty的elf文件&#xff0c;也可以在攻击机编译好上传 启动&#xff0c;123456是设…

体验完这款售价29999元起苹果新品,我大受震撼

讲道理&#xff0c;数码圈已经很久没有出现过让人耳目一新的产品了。 整个圈子近些年各家新品逻辑给我的一种感觉是普遍主打循规循距&#xff0c;用高情商话来说那叫稳扎稳打不易出错&#xff0c;而低情商嘛&#xff0c;说白了叫创新精神严重缺失。 「科技最后以换皮为准」这…

C语言学习 关于short和int

&#x1f308; 关于今天的这一part 简单说说关于C中的short 和 int 主要是复盘C语言时候的一个小小的回顾把~&#xff08;内容来自C Primer Plus 第六版&#xff09; &#x1f433;主要是讨论一下两个东西 1️⃣ 在给函数传递参数时&#xff0c;C编译器把short类型的值自动转换…

【CUDA】 Trust基本特性介绍及性能分析

Trust简介 Thrust 是一个实现了众多基本并行算法的 C 模板库,类似于 C 的标准模板库(standard template library, STL)。该库自动包含在 CUDA 工具箱中。这是一个模板库,仅仅由一些头文件组成。在使用该库的某个功能时,包含需要的头文件即可。该库中的所有类型与函数都在命名空…

【linux】 sudo apt update报错——‘由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32’

【linux】 sudo apt update报错——‘由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 3B4FE6ACC0B21F32’ 在运行sudo apt update时遇到报错&#xff0c;由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 3B4FE6ACC0B21F32 解决方法&#x…

C++八股(五)之Linux常用命令

目录 一、Linux常用命令有哪些? 二、Linux中查看进程运行状态的指令、tar解压文件的参数。⭐⭐⭐ 三、如何创建一个新的目录?⭐⭐ 四、说说如何以root权限运行某个程序。⭐ 五、linux里如何查看一个想知道的进程?⭐ 六、Linux里如何查看带有关键字的日志文件?⭐ 七、…

Qt:11.输入类控件(QLineEdit-单行文本输入控件、QTextEdit-多行文本输入控件、QComboBox-下拉列表的控件)

一、QLineEdit-单行文本输入控件&#xff1a; 1.1QLineEdit介绍&#xff1a; QLineEdit 是 Qt 库中的一个单行文本输入控件&#xff0c;不能换行。允许用户输入和编辑单行文本。 1.2属性介绍&#xff1a; inputMask 设置输入掩码&#xff0c;以限定输入格式。setInputMask(con…

react学习——25redux实现求和案例(完整版)

1、目录结构 2、count/index.js import React, {Component} from "react"; //引入store,用于获取数据 import store from ../../redux/store //引入actionCreator 专门创建action对象 import {createDecrementAction,createIncrementAction} from ../../redux/coun…