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

news2025/2/24 0:18:19

业务已上传则资源

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

效果如下:

设计环境: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 {
    @Autowired
    private 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 {
    @Autowired
    private UserMapper userMapper;

    @Override
    public 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.coloradmin.cn/o/1914520.html

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

相关文章

快问快答,一套源码的价格在多少钱左右?

购买一套商城源码的价格大致在几千元到几十万不等&#xff0c;具体取决于多种因素。下面将详细分析影响商城源码价格的主要因素&#xff1a; 商城类型 B2B2C商城&#xff1a;这类商城支持平台自营和多商户入驻&#xff0c;功能相对复杂&#xff0c;价格较高。一般价格在8-15万…

移动UI:发现页面,是什么,有啥作用,该如何设计呢?

移动应用中的“发现页面”通常用于向用户展示新的内容、功能、活动或推荐信息&#xff0c;以帮助用户发现和探索应用中的新内容或功能。设计一个好的发现页面可以提升用户对应用的兴趣和粘性。 以下是设计发现页面时可以考虑的一些要点&#xff1a; 1. 推荐内容&#xff1a; …

【网络安全科普】网络安全指南请查收

随着社会信息化深入发展&#xff0c;互联网对人类文明进步奖发挥更大的促进作用。但与此同时&#xff0c;互联网领域的问题也日益凸显。网络犯罪、网络监听、网络攻击等是又发生&#xff0c;网络安全与每个人都息息相关&#xff0c;下面&#xff0c;一起来了解网络安全知识吧。…

如何保障生物制药中试验网和办公网之间的跨网安全文件交换数据?

在针对数据化大环境下&#xff0c;生物制药企业的数据安全尤为关键&#xff0c;尤其是试验网与办公网之间的数据交换。这些数据不仅包含新药品研发成果、临床试验数据&#xff0c;还有健康医疗数据等&#xff0c;都是企业的核心竞争力和商业秘密 。因此&#xff0c;安全地进行跨…

代码随想录(day3)有序数组的平方

暴力求解法&#xff1a; 注意&#xff1a;需要确定范围&#xff0c;比如nums.sort()是在for循环之外&#xff0c;根据函数的功能来确定 return返回的是nums&#xff0c;而不是nums[i]因为返回的是整个数组 class Solution(object):def sortedSquares(self, nums):for i in r…

【Linux】:程序替换

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux程序替换的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门…

AWS-WAF-Log S3存放,通过Athena查看

1.创建好waf-cdn 并且设置好规则和log存储方式为s3 2. Amazon Athena 服务 使用 &#xff08;注意s3桶位置相同得区域&#xff09; https://docs.aws.amazon.com/zh_cn/athena/latest/ug/waf-logs.html#waf-example-count-matched-ip-addresses 官方文档参考,建一个分区查询表…

批量发送定制邮件内容

需要给以下学员发送作业反馈邮件&#xff08;文件名为&#xff1a;学员作业反馈.xlsx&#xff09; 学员序号学员姓名学员邮箱作业反馈20090001海龙3177261496qq.com第1题&#xff1a;少了一个a20090002真达3177261496qq.com第2题&#xff1a;少了一个b20090003张三3177261496…

Python: 分块读取文本文件

在处理大文件时&#xff0c;逐行或分块读取文件是很常见的需求。下面是几种常见的方法&#xff0c;用于在 Python 中分块读取文本文件&#xff1a; 1、问题背景 如何分块读取一个较大的文本文件&#xff0c;并提取出特定的信息&#xff1f; 问题描述: fopen(blank.txt,r) quot…

昇思25天学习打卡营第17天|应用实践之SSD目标检测

基本介绍 今天要学习的内容是计算机视觉领域中的目标检测任务。与图像分类相比&#xff0c;目标检测更难&#xff0c;因为目标检测不仅要检测出图片中的物体的类别&#xff0c;还要检测出该物体的位置。现主流的目标检测算法大致可分为两种&#xff0c;一种是基于CNN的&#xf…

Type-C/DP1.4到HDMI2.0替代龙讯LT8711HE,集睿智远CS5262

NCS8622是一款高性能低功耗的Type-C/DP1.4到HDMI2.0转换器&#xff0c;设计为连接USB Type-C源或DP1.4源到HDMI2.0。 NCS8622集成了符合DP1.4标准的接收器&#xff0c;以及符合HDMI2.0标准的发射器。此外&#xff0c;CC控制器用于将CC通信到实现DP Alt模式。DP接收器集成了HDCP…

软考五个高级科目怎么选?如何一口气拿下证书!

软考高级包括&#xff1a; 信息系统项目管理师、系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师等五个考试。 一、各科特点&#xff1a; 信息系统项目管理师 特点&#xff1a;主要从事信息系统项目管理方面的工作&#xff0c;要求掌握项目管理的知识体系和实…

类与对象-继承-构造和析构顺序

构造和析构顺序 #include<iostream> using namespace std;class Base { public:Base(){cout << "Base构造函数" << endl;}~Base(){cout << "Base析构函数" << endl;} };class Son :public Base { public:Son(){cout <&l…

C#开发:下载node.js指定版本

一、打开官网 二、找到指定版本 三、选择程序包msi下载 四、验证下载是否成功 cmd输入&#xff1a; node -v npm -v

从零开始学量化~Ptrade使用教程(四)——股票普通买卖与回购业务

股票普通买卖 股票买入 通过选择委托方向实现股票的买入与卖出&#xff0c;可根据输入的价格自动查询可买数量。 用鼠标点击【买入】&#xff0c;如图所示&#xff1a; 输入股票代码并选中后&#xff0c;选择委托类型&#xff0c;若为限价类型&#xff0c;输入委托价格&#xf…

如何用Vue3和Plotly.js绘制交互式瀑布图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 Plotly.js 在 Vue 中创建瀑布图 应用场景 瀑布图广泛用于可视化财务报表和展示增量变化&#xff0c;例如利润表、现金流量表和收入分析。它们通过将正值和负值堆叠在垂直轴上&#xff0c;清晰地展示每个…

宿州降本 提质 增效 数据采集监控平台提高生产自动化水平

在当今竞争激烈的市场环境中&#xff0c;企业追求降本、提质、增效已成为发展的关键。而我们的[数据采集监控平台名称]数据采集监控平台&#xff0c;正是助力企业实现这一目标的强大工具。 LP-SCADA数据采集监控平台是工业4.0中主要的数据采集系统之一&#xff0c;主要针对产线…

告别堆积,迎接清新:回收小程序,打造无废生活新选择

在快节奏的现代生活中&#xff0c;物质的丰富与便利似乎成为了我们日常的一部分&#xff0c;但随之而来的&#xff0c;是日益增长的废弃物堆积问题。街道边、社区里&#xff0c;甚至是我们的家中&#xff0c;废弃物品仿佛无孔不入&#xff0c;逐渐侵蚀着我们的生活空间与环境质…

漏洞挖掘思路分享 | 首次尝试cnvd捡洞

因为那天项目刚忙完闲来无事&#xff0c;尝试捡个cnvd洞&#xff0c;cnvd录取要五千万资产&#xff0c;自己又懒得找毕竟捡洞嘛&#xff0c;索性去cnvd上进行搜集 直接开搜弱口令&#xff0c;因为我比较喜欢有登录框的站&#xff0c;这样搜索出来的资产可能就更容易进行挖掘 随…

CSS动画和JavaScript动画,大扫盲,有代码示例。

小伙伴们都知道&#xff0c;css和JavaScript都可以做动画&#xff0c;但是大都不知道二者的区分&#xff0c;该如何选择&#xff0c;贝格前端工场借助本文为大家分享一下。 一、css动画和JavaScript动画的区分 CSS动画和JavaScript动画都可以用于在网页上创建动态效果&#x…