06-使用axios发送登录请求

使用axios发送登录请求

vue项目实战系列

主要内容:

  1. axios的安装
  2. 使用axios发送请求
  3. vue cli 3.0跨域的设置
  4. 在项目中使用YAPI模拟登录接口

1 任务概述

我们在前面已经实现了在表单中输入用户名和密码,点击登录按钮后跳转到主页的功能,而且也在YAPI上设计好了登录接口,接下来的任务是在输入用户名和密码后,点击登录按钮,我们开始发送登录请求,根据接口返回的消息,成功后跳转到主页,用户名密码错误,则打印返回消息,不去跳转。

我们在接口中假设密码输入8个8就返回code位1,msg为“用户名和密码错误!”。

2 axios概述

我们在向后端发送登录请求,接收返回结果时,使用axios组件。

什么是axios?

axios是可以用在浏览器和node.js中的基于promise的HTTP库。

axios特性

  • 可以从浏览器中创建XMLHttpRequest

  • 可以从node.js中创建http请求

  • 支持Promise API

  • 拦截请求和响应

  • 转换请求和响应数据

  • 可以取消请求

  • 能够自动转换JSON数据

关于promise

Promise,承诺,一诺千金

Promise是支持异步编程的对象,有all,reject、resolve几个方法,在原型上有then,catch等方法

axios参考网址:

https://github.com/axios/axios

https://www.kancloud.cn/yunye/axios/234845

3 安装axios

在vs code中打开终端窗口,运行如下命令:

npm install axios

输出信息:

PS E:\vue_workspace\gdtrain> npm install axios
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.11 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.11: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ axios@0.19.0
added 5 packages from 8 contributors and audited 27103 packages in 18.38s
found 0 vulnerabilities

如果出现以上信息,表示安装成功。

4 配置API请求代理

如果你的前端应用和后端API服务器没有运行在同一台主机上,出于安全问题,浏览器会禁止你跨域访问(CORS,Cross origin resource sharing),我们在开发环境下经常会将API请求代理到API服务器,允许跨域访问,这在vue cli3.0以上版本中是通过vue.config.js中的devServer.proxy选项来设置的。

vue cli3.0的配置和以前的版本不同,以前的配置信息是在config/index.js中,从vue cli3.0开始,为了追求零配置,没有了config文件夹,但是我们的项目还是要配置的,这时你需要在项目根目录中(不是src目录,和package.json同级)自己创建vue.config.js文件,加入你自己的配置,不关心的配置可以不必写入,vue会采用默认配置。如果存在vue.config.js文件,vue会自动加载vue.config.js里面的配置来覆盖默认配置。

1)在项目根目录下创建vue.config.js文件

在这里插入图片描述

2)在vue.config.js文件中添加如下内容:

module.exports = {
  devServer: {
    proxy: {// API代理
      '/api': {
        // 凡是到/api的请求都会发往下面的地址
        target: 'http://yapi.demo.qunar.com/mock/66031/api',
        changeOrigin: true, // 允许跨域
        pathRewrite: {
          '^/api': ''
        }
      }

    }
  }

}

代码说明:

  • 此段代码配置了API代理,也就是通常所说的反向代理
  • line2:devServer开发环境下的配置
  • line3:proxy,API代理
  • line4:凡是基础路径是api的请求都会发往line6处的目标url
  • line7:这里是关键,配置允许跨域访问
  • line8~line9:重写目标url路径

关于’^/api’:’'的设置说明:

当点击登录按钮时,axios会向/login发送请求,为了区分便于服务器区分将请求发往那些代理服务器,axios有一个baseURL附在前面,我们在代码中设置的axios的baseURL是api,此时就变成了向/api/login发送请求,vue开发服务器会基于这个baseURL拦截到请求,然后做代理,此时baseURL的使命已经完成,我们实际请求的是/login,所以在路径重写中把它去掉,^/api是正则表达式表示匹配以/api开头的部分,换成后面引号中的内容,这里相当于删除了请求路径中的/api,即只剩下/login,然后把这个/login附加到目标路径之后,我们的目标路径是:http://yapi.demo.qunar.com/mock/66031/api,添加上/login后,变成实际请求的接口路径,即:http://yapi.demo.qunar.com/mock/66031/api/login。

关于Vue CLI配置的更多参考:

https://cli.vuejs.org/zh/config/#全局-cli-配置

没有配置跨域请求时会在后台出现类型下面的错误

Access to XMLHttpRequest at 'http://yapi.demo.qunar.com/.../api/login' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

5 引入axios

为了能够在各个组件中全局使用axios,我们需要在main.js中引入axios,并进行必要的设置,比如设置前面提到的baseURL

此时main.js的代码如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

var axios = require('axios')
axios.defaults.baseURL = '/api'

Vue.config.productionTip = false

Vue.prototype.$axios = axios

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

代码说明:

  • line 6:引入axios
  • line7:设置axios发送请求的baseURL,axios所有请求都会在前面添加的url,通常和前面反向代理设置的匹配路径一致
  • line11:将axios挂载到vue原型上,各个组件可以直接通过vue实例访问。

6 使用axios发送请求

我们在Login.vue,使用axios发送登录请求,并根据请求结果跳转到主页。下面是Login.vue中的代码:

<template>
  <div>
    <h3>登录系统</h3>用户名:
    <input type="text" v-model="loginForm.userName" placeholder="请输入用户名" />
    <br />密码:
    <input type="password" v-model="loginForm.password" placeholder="请输入密码" />
    <br />
    <button @click="login">登录</button>
  </div>
</template>

<script>
export default {
  name: 'Login',
  data () {
    return {
      loginForm: {
        userName: '',
        password: ''
      }
    }
  },
  methods: {
    login () {
      console.log(this.loginForm.userName)
      console.log(this.loginForm.password)

      this.$axios.post('/login', {
        userName: this.loginForm.userName,
        password: this.loginForm.password
      })
        .then(resp => {
          if (resp.data.code === 0) {
            console.log(resp.data.user)
            this.$router.replace('/index')
          } else {
            console.log(resp.data.msg)
          }
        })
        .catch(failResponse => { })
    }

  }

}
</script>

<style>
</style>

我们在此处仅修改了login方法(line28~line40),添加了使用axios发送登录请求,根据返回结果进行路由跳转的代码。

代码说明:

  • 使用axios的post方法发送请求,响应结果在then方法中处理,如果响应失败在catch中处理
  • line28:由于axios已经挂载到了Vue原型之上,这里的this代表vue实例,可以直接访问axios。
  • line33:由登录api返回的对象存储在响应对象resp的data中,通过检查code来确定登录是否成功,登录成功则在line34行向控制台输出user对象,并在line35行跳转到用户主页,如果code的值非0,表示登录失败,则在line37行打印登录接口返回的消息
  • line33:这里3个等号表示恒等,类型和值都一致。

1 关于axios的post方法:

post方法:axios#post(url[, data[, config]])

第一个参数是请求url,后面根可选的data和config,data是要发送的数据,config是额外的配置信息

下面是指向post请求的一个示例:

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

2 关于返回的响应结果:

下面是一个响应的数据结构:

{
  // `data` 由服务器提供的响应
  data: {},

  // `status` 来自服务器响应的 HTTP 状态码
  status: 200,

  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: 'OK',

  // `headers` 服务器响应的头
  headers: {},

  // `config` 是为请求提供的配置信息
  config: {}
}

返回的数据会放到data中,status存储http状态码,statusText是状态码的描述。

使用 then 时,你将接收下面这样的响应:

axios.get('/user/12345')
  .then(function(response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });

7 测试运行

在vs code中通过快捷键ctrl+反引号打开终端,输入如下命令:

npm run serve

从浏览器中访问localhost:8080

在这里插入图片描述

输入用户名:jerry,密码:8个1后提交:

在这里插入图片描述

你可以看到登录成功,并且可以在控制台显示出返回的user对象。

如果输入用户名:jerry,密码:8个8,我们约定的错误密码,则显示如下:

在这里插入图片描述

至此,我们登录请求完毕。

8 总结

我们使用axios发送登录请求时,由于是后端使用模拟接口,我们需要在vue.config.js中配置api代理即反向代理,请求成功后我们在axios的then方法中处理返回数据,根据情况跳转到登录主页。

后面的任务,我们将使用element ui把我们的登录页面美化一下。

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 你好!下面是一个使用 axios 进行登录的示例: ``` import axios from 'axios'; const login = async (username, password) => { try { const response = await axios.post('/login', { username, password }); const { data } = response; return data; } catch (error) { console.error(error); } }; // 使用示例 login('myusername', 'mypassword').then(response => { console.log(response); }); ``` 在这个示例中,我们使用 axios 的 `post` 方法向服务器发送一个 POST 请求请求的目标地址是 `/login`,并传递了用户名和密码作为请求体。如果请求成功,我们将响应数据(通常是用户信息或者一个登录凭证)存储在 `response.data` 中,然后返回它。如果请求失败,我们将在 catch 块中处理错误。 希望这能帮到你! ### 回答2: axios是一种常用的HTTP请求库,用于在前端和后端之间进行数据交互。下面是一个使用axios进行登录的例子: 首先,我们需要在前端的代码中引入axios库。 ```javascript import axios from 'axios'; ``` 接下来,我们可以定义一个登录函数,该函数将发送用户的登录凭证(用户名和密码)到服务器,并接收服务器返回的登录结果。 ```javascript async function login(username, password) { try { const response = await axios.post('/api/login', { username: username, password: password }); const { data } = response; if (data.success) { console.log('登录成功!'); // 保存登录状态或跳转到其他页面 } else { console.log('登录失败:' + data.message); } } catch (error) { console.error('登录失败:' + error); } } ``` 在上述代码中,我们使用axios.post方法向服务器的/login接口发送POST请求请求的数据包括用户名和密码,通过传递一个JavaScript对象来实现。 然后,我们通过解构赋值的方式获取服务器返回的data字段,该字段包含了登录结果的详细信息。 如果登录成功(即data.success为true),我们可以根据需要保存登录状态或跳转到其他页面。如果登录失败,我们可以根据data.message字段中的错误信息来提示用户。 需要注意的是,上述代码中的请求地址(/api/login)需要根据实际情况进行修改,以匹配服务器端的登录接口地址。 这就是一个简单的使用axios进行登录的示例。通过axios发送请求并处理服务器返回的结果,我们可以实现前后端之间的数据交互。 ### 回答3: 使用axios进行登录可以通过发送HTTP请求来实现与服务器的交互。以下是一个带有axios登录过程的示例: 首先,确保已经在项目中安装了axios,并在需要登录的组件文件中引入axios库: ```javascript import axios from 'axios'; ``` 在登录的方法中,我们可以使用axios发送POST请求来将用户提供的登录凭证发送给服务器进行验证: ```javascript login() { axios.post('/api/login', { username: this.username, password: this.password }) .then(response => { // 登录成功的处理逻辑 console.log(response.data); }) .catch(error => { // 登录失败的处理逻辑 console.error(error); }); } ``` 在上述代码中,我们通过`axios.post`方法发送了一个POST请求到`/api/login`接口,并传递了一个包含用户名和密码的对象作为请求体。 在服务端,我们可以使用任何后端框架(如Express.js)来处理这个登录请求,验证用户提供的凭证,并返回相应的结果。 需要注意的是,我们应该将登录凭证以安全的方式传输,可以通过使用HTTPS协议或其他加密手段来保护用户的敏感信息。 登录成功后,服务器可以返回一些用户数据,我们可以在`then`回调函数中获取到这些数据并进行相应的处理。而如果登录失败,则可以在`catch`回调函数中捕获到错误并进行处理。 以上就是一个使用axios实现登录的示例,其中的细节部分可能会根据具体的项目和后端实现而有所差异。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值