IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【VUE项目实战】12、登录与退出功能-请求登录 -> 正文阅读

[JavaScript知识库]【VUE项目实战】12、登录与退出功能-请求登录

接上篇《11、绘制登录组件-数据验证篇
上一篇我们讲解了如何实现账号密码的数据验证、表单的重置以及登录前的预验证。
本篇我们来讲解点击登录后发起登录请求的操作。

一、进行登录请求

上一篇我们在点击登录按钮前校验了表单内容的合法性,下面我们就根据表单的校验成功与否,来决定是否执行登录。

我们在原来的login方法中,判断表单校验方法中的valid形参,如果是false的时候,就不进行登录请求,如果是true,就进行登录请求:

login(){
? this.$refs.loginFormRef.validate((valid)=>{
? ? if(!valid) return;//false 不执行登录
? ? //true执行登录
? ??
? });
}

这里需要调用的是之前接口文档中的login接口:
进行登录需要执行网络服务请求,我们这里使用axios组件。首先在原来的main.js中添加axios的引用(组件已经在项目初始化的时候安装了),指定我们的后台接口的根路径,并将axios对象赋值给全局$http对象:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
//导入全局样式表
import './assets/css/global.css'
import axios from 'axios'
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/' //定义根路径
Vue.prototype.$http = axios //在原型链上给$http赋值为axios对象

Vue.config.productionTip = false

new Vue({
? router,
? render: h => h(App)
}).$mount('#app')

此时我们回到login方法,这个时候就可以使用axios进行网络请求了:

login(){
? this.$refs.loginFormRef.validate(async (valid)=>{
? ? if(!valid) return;//false 不执行登录
? ? //true执行登录
? ? const result = await ?this.$http.post("login",this.loginFrom);
? ? console.log(result);
? });
}

因为登录接口需要账号密码,而我们表单中的账号密码信息都封装在loginFrom对象中,所以这里直接传该对象。
然后因为axios的post请求返回的是一个Promise对象,需要用await修饰,然后上面整个方法体要修饰为async同步锁,才能等post请求结束后,result来接收到返回的值。
这里我们先打印出来返回的result数据,看看都是什么信息。

我们要验证接口请求效果,首先保证我们之前的Mysql数据库是启动状态:

然后启动后台NodeJS服务:
服务启动成功后,我们启动vue前端项目,在登录页面输入账号密码试试:

F12打开开发者工具,可以看到axios为我们封装好的返回对象,其中data就是服务端的返回信息。
我们可以看到data中的data是数据,meta是提示信息,我们可以用解构表达式只接受data参数,并赋值给一个对象,打印出来:

login(){
? this.$refs.loginFormRef.validate(async (valid)=>{
? ? if(!valid) return;//false 不执行登录
? ? //true执行登录
? ? const {data:res} = await this.$http.post("login",this.loginFrom);
? ? console.log(res);
? });
}

再次请求,可以看到返回的两个参数的内容:

二、提示用户登录结果

通过观看API文档可以知道,当status为200的时候,是登录成功,其余都是登录失败,我们可以加一个判断,给用户一个弹框反馈:

login(){
? this.$refs.loginFormRef.validate(async (valid)=>{
? ? if(!valid) return;//false 不执行登录
? ? //true执行登录
? ? const {data:res} = await this.$http.post("login",this.loginFrom);
? ? console.log(res);
? ? if(res.meta.status !== 200) return alert("登录失败!");
? ? alert("登录成功!");
? });
}

效果:

这里的弹框非常丑陋,我们需要用到elementUI中的Message消息提示组件,分为四张,分别显示「成功、警告、消息、错误」的带颜色效果浮窗:

样例代码:

<template>
? <el-button :plain="true" @click="open2">成功</el-button>
</template>

<script>
? export default {
? ? methods: {
? ? ? open1() {
? ? ? ? this.$message('这是一条消息提示');
? ? ? },
? ? ? open2() {
? ? ? ? this.$message({
? ? ? ? ? message: '恭喜你,这是一条成功消息',
? ? ? ? ? type: 'success'
? ? ? ? });
? ? ? },
? ? ? open3() {
? ? ? ? this.$message({
? ? ? ? ? message: '警告哦,这是一条警告消息',
? ? ? ? ? type: 'warning'
? ? ? ? });
? ? ? },
? ? ? open4() {
? ? ? ? this.$message.error('错了哦,这是一条错误消息');
? ? ? }
? ? }
? }
</script>

我们来编写一下,首先在element.js中引入我们的Message组件:

import Vue from 'vue'
import { Button } from 'element-ui'
import {Form,FormItem} from 'element-ui'
import {Input} from 'element-ui'
import {Message} from 'element-ui' //弹框提示组件

Vue.use(Button)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Input)
Vue.prototype.$message = Message //给原生链上的$message指定为Message

然后修改刚刚的login方法,根据不同的登录反馈结果,显示不同的弹框:

login(){
? this.$refs.loginFormRef.validate(async (valid)=>{
? ? if(!valid) return;//false 不执行登录
? ? //true执行登录
? ? const {data:res} = await this.$http.post("login",this.loginFrom);
? ? console.log(res);
? ? if(res.meta.status !== 200) return this.$message.error("登录失败!"+res.meta.msg);
? ? this.$message.success("登录成功!");
? });
}

效果:

至此,我们的登录请求部分编写完成。
下一篇我们来处理进登录成功之后的行为。

参考:黑马程序员(www.itheima.com)Vue项目实战教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/119971099

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 08:59:40  更:2021-08-29 09:00:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:58:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码