实现vue项目和springboot项目前后端数据交互

news2024/11/18 3:36:21

1、安装node.js

  • 太高版本的win7不支持
    这里安装node-v12.16.2-x64.msi,指定安装位置后直接按下一步就可以。
  • npm是node内置的工具
    这里配置npm的镜像cnpm(提高下载速度,以后用到npm的命令都可以用cnpm命令替换)不指定cnpm版本使用如下命令会报错:
npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 错误信息:
npm WARN notsup Unsupported engine for npm-normalize-package-bin@3.0.1: wanted:{"node":"^14.17.0 || ^16.13.0 || >=18.0.0"} (current: {"node":"12.16.2","npm":"6.14.4"})
npm WARN notsup Not compatible with your version of node/npm: npm-normalize-package-bin@3.0.1
  • 检查错误,参照网上的对应版本图,node12要用cnpm 6版本,输入如下命令:
npm install -g cnpm@6 --registry=https://registry.npm.taobao.org

在这里插入图片描述

  • 查看node和npm版本
node -v
npm -v

2、安装vue-cli脚手架

  • vue-cli是在node基础上构建的工具,而vue-cli又可以快速搭建含vue功能的模块(即模块化开发)。安装vue-cli 3.x脚手架命令如下:
cnpm install @vue/cli -g
  • 查看版本
vue -V

3、创建vue项目

vue-cli脚手架创建的是模块化项目,使用模块化开发(.vue后缀的文件为单文件组件,一个文件里封装了html、js、css代码)。项目属于单页面应用(SPA),通过路由跳转链接,不利于SEO(爬虫抓取不到内容),可以用Nuxt框架解决该问题(这是后话)。所以说vue比较适合做后台管理系统。但前端分离的插拔特性,可以让它方便地切换为移动端浏览器、app或小程序。

  • 这里有两种方法创建,第一种是用命令(会在当前文件夹下创建文件夹):
vue create 项目名 
  • 第二种用UI可视化界面创建:
vue ui

启动vue可视化工具,会在浏览器中打开,创建过项目的需要返回主页:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选手动配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点创建即可。
在这里插入图片描述
这里不保存预设。
在这里插入图片描述
等待安装完,来到欢迎界面就可以就可以关闭网页了,后期安装其它插件我们可以通过命令行执行,也很方便。

  • 进入项目文件夹下,cmd执行命令启动项目
cd 项目文件夹名
npm run serve

运行后,显示如下,在浏览器中输入其中一个地址即可看到欢迎界面,说明vue项目成功跑起来了。
在这里插入图片描述
在这里插入图片描述

4、数据交互的准备工作

这里默认你已经懂得vue编码的一些基础知识,由于缩减篇幅,所以在此只会贴上关键代码。

前后端分离的项目,要进行数据交互,我们使用的是异步请求工具,JS使用的是Ajax,而vue使用的是axios

  • 安装axios插件:
cnpm install axios -S
cnpm i vue-axios -S

5、前后端数据交互之前端

前后端人员协商会有接口文档,我们以登录和注册为例:
在这里插入图片描述

  • 登录请求
//发送get请求 查询用户(用post更安全,这里只是举例使用方法)
						this.axios.get("http://localhost:80/api/user/login",{
							params:{
								"username":username,
								"password":password
							}
						}).then(resp => { //数据传输成功
							//用户名密码正确
							if(resp.data.data_status === 0){
							//路由跳转
								router.push("/")
							}
							else{
							//显示失败消息,可能是用户名或密码错误
								ElMessage({
									message:resp.data.data.message,
									duration:1000,
									type:"error"
								})
							}							
						}).catch(error => { //数据传输失败
							console.log(error)
						})
  • 注册
//访问后台保存用户(注册)
					  this.axios.post("http://localhost:80/api/user/register",{
						  "username":username,
						  "email":email,
						  "password":password
					  }).then(function(response){
						  //发送成功,接受返回注册状态信息
						  if(response.data.data_status === 0){
							  //注册成功,路由跳转							
							  router.push("/login")
						  }
						  else{
						  	//显示注册失败,用户已存在
							  ElMessage({
							  	message:response.data.data.message,
							  	duration:1000,
							  	type:"error"
							  })
						  }
					  }).catch(function(response){
						  alert("数据传输失败")
					  })
  • 注意,这里的data_status、data.message是由后端返回的数据决定的,名称要与后端设定的返回值一致,可以先用console.log(response)查看一下返回的数据。

6、前后端数据交互之后端

  • GET提交:请求的数据会附在URL之后,在地址栏显示出来;POST提交:把提交的数据放置在是 HTTP 包的包体(请求体)中。地址栏不会改变。
  • 后端Get不要在参数加@RequestBody,因为请求是在url里中传参
    Post要在参数加@RequestBody,因为是在请求体中取值
  • 后端登录
	//后端登录
	@GetMapping("/api/user/login")
	@ResponseBody//使用ajax时必须加,会把返回类转化为json  Get不要加@RequestBody,是在url里中传参
	public CommonResult<Message> loginVue(User user){
		
		//注册用户逻辑
		int data_status = userService.loginVue(user);
		if (data_status == 0) {
			return CommonResult.success(Message.createMessage("注册成功"));
		} 
		//实际开发中的状态码举例:   10001 用户已存在  10002 用户名或密码错误  20001 商品已存在 。。。
		else if(data_status == 2){
			return CommonResult.failed(data_status, Message.createMessage("用户名或密码错误!!!"));
		}
		else {
			return null;
		}
		
	}
  • 后端注册
	@PostMapping("/api/user/register")
	@ResponseBody//使用ajax时必须加,会把返回类转化为json  Post要加@RequestBody,是在请求体中取值
	public CommonResult<Message> registerVue(@RequestBody User user){
		
		//System.out.println(username);
//		System.out.println(user);
		//注册用户逻辑
		int data_status = userService.registerVue(user);
		if (data_status == 0) {
			return CommonResult.success(Message.createMessage("注册成功"));			
		} else {
			return CommonResult.failed(data_status, Message.createMessage("用户名或邮箱已存在,请更改信息!!!"));
		}
		
	}

Get请求不要在参数前加@RequestBody,Post请求要在参数前加@RequestBody。重要的事情说三遍!!!

这样就可以直接使用User user参数来接受值

  • 后端登录还是注册都会有返回值,类名可以自定义,但类里的属性名称定义要和接口文档一致,这样前端接收到对应的值。这里我们定义了一个泛型的CommonResult<Message>。
package com.zzz.login_demo.utils;

public class CommonResult<T> {

	private Integer data_status;
	private T data;
	
	protected CommonResult() {
	}
	
	protected CommonResult(int data_status, T data){
		this.data_status = data_status;
		this.data = data;
	}
	
	//返回成功(不带data信息)
	public static CommonResult<Object> success() {
		return new CommonResult<Object>(0, null);
	}
	//返回成功(带data信息)
	public static <T> CommonResult<T> success(T data) {
		return new CommonResult<T>(0, data);
	}
	//返回失败(带data信息)
	public static <T> CommonResult<T> failed(int data_status, T data) {
		return new CommonResult<T>(data_status, data);
	}

	//get/set...
}
package com.zzz.login_demo.utils;

public class Message {
	
	private String message;

	protected Message() {
	}
	
	public Message(String message) {
		super();
		this.message = message;
	}
	
	public static Message createMessage(String message) {
		return new Message(message);
	}

	//get/set...

}
  • 测试前后端数据交互时报错:Access-Control-Allow-Origin
Access to XMLHttpRequest at 'http://xxx' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是跨域请求出错,可以在前端或后端配置跨域请求。
感觉添加后端配置跨域请求比较方便,在每个Controller类的注解@Contoller的下一行添加注解@CrossOrigin即可。

7、扩展

vue项目如何部署到服务器?(Nginx)
前端、后端分开开发时如何模拟用假数据测试?(mockjs、postman)
感兴趣的童靴可以留言给我,我会安排写作。

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

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

相关文章

Tuxera2023最新版本新功能特性

当您获得一台新 Mac 时&#xff0c;它只能读取 Windows NTFS 格式的 USB 驱动器。要将文件添加、保存或写入您的 Mac&#xff0c;您需要一个附加的 NTFS 驱动程序。Tuxera 的 Microsoft NTFS for Mac 是一款易于使用的软件&#xff0c;可以在 Mac 上打开、编辑、复制、移动或删…

【论文阅读笔记】 Curated Pacific Northwest AI-ready Seismic Dataset

Curated Pacific Northwest AI-ready Seismic Dataset 太平洋西北部人工智能地震数据集 摘要 描述了一个AI就绪地震数据集包括各种地震事件参数 仪器元数据 地震波行描述地震目录和事件属性&#xff08;事件震级类型&#xff0c;信道类型&#xff0c;波形极性&#xff0c;信…

【框架源码篇 02】Spring源码-手写DI

Spring源码手写篇-手写DI 简单回顾前面的手写IoC的内容。 一、DI介绍 DI(Dependency injection)依赖注入。对象之间的依赖由容器在运行期决定&#xff0c;即容器动态的将某个依赖注入到对象之中。说的直白点就是给Bean对象的成员变量赋值。 在这里我们就需要明白几个问题。 1.…

【进阶C语言】C语言文件操作

1. 为什么使用文件 2. 什么是文件 3. 文件的打开和关闭 4. 文件的顺序读写 5. 文件的随机读写 6. 文本文件和二进制文件 7. 文件读取结束的判定 8. 文件缓冲区 一、文件与文件的意义 1.文件的意义 文件的意义&#xff0c;无非就是为什么要使用文件&#xff1f; &#xff08;1&…

当中国走进全球化的“深水区”,亚马逊云科技解码云时代的中国式跃升

中国跨境贸易中支付金融与服务领域的综合创新型企业连连国际的联席CEO沈恩光发现&#xff0c;眼下&#xff0c;很多跨境电商的出海方式已发生了变化。几年前&#xff0c;它们还主要借助第三方电商平台&#xff0c;而现在&#xff0c;更多公司开始选择通过自主渠道进入海外市场&…

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法

文章目录 一、代码仓库二、向量的基本运算2.1 加法2.2 数量乘法2.3 向量运算的基本性质2.4 零向量2.5 向量的长度2.6 单位向量2.7 点乘/内积&#xff1a;两个向量的乘法 --答案是一个标量 三、手写Vector代码3.1 在控制台测试__repr__和__str__方法3.2 创建实例测试代码3.3 完整…

磁盘显示脱机状态如何处理

问题描述&#xff1a; 在磁盘管理可以看到磁盘1是脱机状态 脱机&#xff08;由于管理员设置的策略&#xff0c;该磁盘处于脱机状态&#xff09; 解决方法一&#xff1a;CMD窗口处理 1.打开CMD&#xff0c;运行diskpart 2.输入san&#xff0c;打开san策略&#xff0c; 输入san…

2防火墙:基础知识

看了一下相关视频&#xff0c;感觉要会防火墙&#xff0c;还是得补一下网络基础。看一下谢希仁的《计算机网络》&#xff0c;应该主要看网络层就可以。网络以前学的还可以&#xff0c;但现在也就能记得不到50%&#xff0c;正好重新学习一下&#xff0c;或许会有新的感受。 看完…

S4.2.4.3 Electrical Idle Sequence(EIOS)

一 本章节主讲知识点 1.1 EIOS的具体码型 1.2 EIOS的识别规则 1.3 EIEOS的具体码型 二 本章节原文翻译 当某种状态下,发送器想要进入电器空闲状态的时候,发送器必须发送EIOSQ,也既是:电器Electrical Idle Odered Set Sequence。当然,除非在某些情况下,特殊制定,也是…

用这个方法,谁都可以刷到leetcode排名第一(可复制)

前几天&#xff0c;有人分享了一个利用GPT在leetcode刷题&#xff0c;学习算法&#xff0c;启迪思路&#xff0c;提升编程能力的方法。 开始还不信&#xff0c;自己试了一下&#xff0c;惊了&#xff01;AI理解问题&#xff0c;编码解决问题的能力现在已经这么流弊了吗&#xf…

【具身智能综述1】A Survey of Embodied AI: From Simulators to Research Tasks

论文标题&#xff1a;A Survey of Embodied AI: From Simulators to Research Tasks 论文作者&#xff1a;Jiafei Duan, Samson Yu, Hui Li Tan, Hongyuan Zhu, Cheston Tan 论文原文&#xff1a;https://arxiv.org/abs/2103.04918 论文出处&#xff1a;IEEE Transactions on E…

正则表达式之学习笔记

正则表达式学习笔记 一、概念二、正则表达式组成三、常见的正则表达式3.1 .匹配任意字符3.2 * 匹配前一个字符的0个或多个实例3.3 ^ 匹配输入字符串的开头3.4 $ 匹配行尾3.5 [] 匹配字符集合\<\> 精确匹配符号 一、概念 正则表达式是由一系列特殊字符组成的字符串&#…

大数据分析实践 | pandas数据质量分析

文章目录 &#x1f4da;数据质量评估的五个维度&#x1f4da;口袋妖怪数据质量分析&#x1f407;导入库和数据&#x1f407;检查数据&#x1f407;缺失值分析&#x1f407;重复值检测&#x1f407;异常值检测 &#x1f4da;数据质量评估的五个维度 Coherent: without semantic …

Jetson nano 安装Ubuntu20.04系统

一、下载Ubuntu20.04镜像 下载地址&#xff1a;点击 二、格式化SD卡 &#xff08;1&#xff09;工具&#xff1a;SDFormatter &#xff08;2&#xff09;工具下载-百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1DcwsGzmqrWwFmzpCV7VCyA 提取码&#xff1a…

【LeetCode】62. 不同路径

1 问题 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f…

【Python】13.模块

目录 1. 模块化(module)程序设计理念1.1 模块和包概念的进化史1.2 标准库模块(standard library)1.3 为什么需要模块化编程1.4 模块化编程的流程1.5 模块的API 和功能描述要点1.6 模块的创建和测试代码1.7 模块文档字符串和API 设计 2. 模块的导入2.1 import 语句导入2.2 from……

Spark--经典SQL50题

目录 连接数据库准备工作 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数 2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数 3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩 4、查询平均成绩…

ZCU106+ADRV9371+CPRO33-30.72+6 dB 衰减

文章目录 一、ZYNQ 平台二、ADRV9371三、CPRO33-30.72四、衰减器 一、ZYNQ 平台 之后使用 Zynq UltraScale MPSoC ZCU106&#xff0c;XCZU7EV 器件配备四核 ARM Cortex™-A53 应用处理器、双核 Cortex-R5 实时处理器、Mali™-400 MP2 图形处理单元、支持 4KP60 的 H.264/H.265…

SystemVerilog学习(2)——数据类型

一、概述 和Verilog相比&#xff0c;SV提供了很多改进的数据结构。它们具有如下的优点&#xff1a; 双状态数据类型&#xff1a;更好的性能&#xff0c;更低的内存消耗队列、动态和关联数组&#xff1a;减少内存消耗&#xff0c;自带搜索和分类功能类和结构&#xff1a;支持抽…

div透明模糊背景-渐变背景

background: rgba(245, 246, 246, 0.5) !important;-webkit-backdrop-filter: blur(13px);backdrop-filter: blur(13px);-webkit-transition: all 0.2s;transition: all 0.2s; 渐变 上到下 background: linear-gradient(#E7E7F1,#ffffff); 透明度渐变 上到下 background: lin…