返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue如何调用接口请求头增加参数
  • 907
分享到

Vue如何调用接口请求头增加参数

Vue调用接口Vue调用接口请求头请求头增加参数 2023-01-28 06:01:25 907人浏览 八月长安
摘要

目录Vue调用接口请求头增加参数Vue取消接口请求接口js文件页面中引用总结Vue调用接口请求头增加参数 import axiOS from 'axios' import qs fr

Vue调用接口请求头增加参数

import axiOS from 'axios'
import qs from 'qs'

let api_secret = '935bda53552e49cd56fc'
// 基础配置
if (process.env.node_ENV === 'production') {
  // axios.defaults.baseURL = 'https://' //线上版本域名
  // api_secret = '84a58d7e0c1c89c4c57b41f4f396a45c' //线上版本秘钥
  axios.defaults.baseURL = 'Https://' //开发版本域名
  api_secret = '935bda53552e49cd56' //开发版本秘钥
} else {
  axios.defaults.baseURL = 'https://' //开发版本域名
  api_secret = '935bda53552e49cd56fc' //开发版本秘钥
}
axios.defaults.headers.post = {
  'Content-Type': 'application/x-www-fORM-urlencoded;charset=UTF-8'
}
axios.defaults.timeout = 10000

let cancel
const promiseArr = {}
const CancelToken = axios.CancelToken

axios.interceptors.request.use(
  config => {
    if (process.env.NODE_ENV === 'production') {
    //请求头这里加参数这里加参数这里加参数这里加参数这里加参数
      let setSecret = getSecret()
      config.headers['nonce'] = setSecret.nonce
      config.headers['timestamp'] = setSecret.timestamp
      config.headers['signature'] = setSecret.secret
    }

    // 发起请求时,取消掉当前正在进行的相同请求
    if (promiseArr[config.url]) {
      // promiseArr[config.url]('操作取消')
      promiseArr[config.url] = cancel
    } else {
      promiseArr[config.url] = cancel
    }

    return config
  },
  error => {
    return Promise.reject(error)
  }
)

axios.interceptors.response.use(
  response => {
    return response
  },
  error => {
    return Promise.resolve(error.response)
  }
)

function checkStatus(response) {
  // loading
  // 如果http状态码正常,则直接返回数据
  if (
    response &&
    (response.status === 200 ||
      response.status === 304 ||
      response.status === 400)
  ) {
    return response
    // 如果不需要除了data之外的数据,可以直接 return response.data
  }
  // 异常状态下,把错误信息返回去
  return {
    status: -404,
    msg: '网络异常'
  }
}

function checkCode(res) {
  // 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户
  if (res.status === -404) {
    console.warn(res.msg)
  }

  return res
}
// 共用方法获取签名
function getSecret() {
  let nonce = getNonce()
  let timestamp = getTimestamp()
  let secret = sha1(api_secret + nonce + timestamp)
  let obj = {
    nonce: nonce,
    timestamp: timestamp,
    secret: secret,
  }
  return obj
}

// 随机字符串
function getNonce() {
  let alphabet = 'qwertyuiopasdfghjklzxcvbnMQWERTYUIOPASDFGHJKLZXCVBNM'
  let strlenght = 8 /// 生成的字符串固定长度
  let $num = ''
  for (var i = 0; i < strlenght; i++) {
    $num = $num + alphabet[Math.floor(Math.random() * alphabet.length)]
  }
  return $num
}

// 时间戳
function getTimestamp() {
  let timestamp = Date.parse(new Date()) / 1000
  return timestamp
}
// 字符串加密成 hex 字符串
function sha1(s) {
  var data = new Uint8Array(encodeUTF8(s))
  var i, j, t;
  var l = ((data.length + 8) >>> 6 << 4) + 16,
    s = new Uint8Array(l << 2);
  s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
  for (t = new DataView(s.buffer), i = 0; i < l; i++) s[i] = t.getUint32(i << 2);
  s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
  s[l - 1] = data.length << 3;
  var w = [],
    f = [
      function () {
        return m[1] & m[2] | ~m[1] & m[3];
      },
      function () {
        return m[1] ^ m[2] ^ m[3];
      },
      function () {
        return m[1] & m[2] | m[1] & m[3] | m[2] & m[3];
      },
      function () {
        return m[1] ^ m[2] ^ m[3];
      }
    ],
    rol = function (n, c) {
      return n << c | n >>> (32 - c);
    },
    k = [1518500249, 1859775393, -1894007588, -899497514],
    m = [1732584193, -271733879, null, null, -1009589776];
  m[2] = ~m[0], m[3] = ~m[1];
  for (i = 0; i < s.length; i += 16) {
    var o = m.slice(0);
    for (j = 0; j < 80; j++)
      w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
      t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
      m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
    for (j = 0; j < 5; j++) m[j] = m[j] + o[j] | 0;
  };
  t = new DataView(new Uint32Array(m).buffer);
  for (var i = 0; i < 5; i++) m[i] = t.getUint32(i << 2);

  var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
    return (e < 16 ? "0" : "") + e.toString(16);
  }).join("");

  return hex;
}
// UTF8
function encodeUTF8(s) {
  var i, r = [],
    c, x;
  for (i = 0; i < s.length; i++)
    if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
    else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
  else {
    if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
      c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
      r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
    else r.push(0xE0 + (c >> 12 & 0xF));
    r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
  };
  return r;
}

export default {

  post(url, data) {
    return axios({
        method: 'post',
        url,
        data: qs.stringify(data),
        cancelToken: new CancelToken(c => {
          cancel = c
        })
      })
      .then(response => {
        return checkStatus(response)
      })
      .then(res => {
        return checkCode(res)
      })
  },
  postFormdata(url, data) {
    return axios({
        method: 'post',
        url,
        data,
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      })
      .then(response => {
        return checkStatus(response)
      })
      .then(res => {
        return checkCode(res)
      })
  },
  get(url, query) {
    return axios({
      method: 'get',
      url,
      params: query,
      cancelToken: new CancelToken(c => {
        cancel = c
      })
    }).then(response => {
      return checkStatus(response)
    }).then(res => {
      return checkCode(res)
    })
  }
}

Vue取消接口请求

项目实际开发中,会遇到需要主动取消后端接口请求的需求

常见的情况是:接口返回时间过长,用户在未返回之前就进入或返回了其他页面,此时需要取消进行中的请求,使逻辑更完整更加优雅。

直接复制关键代码,直接使用!

接口js文件

注: 我是把所有请求封装在了单独的js文件中,注意关键代码即可

// 封装好的接口文件

import axios from 'axios'  // 关键代码
const CancelToken = axios.CancelToken   // 关键代码

//方法传参多加一个 that传进去
export function userLoginCA(data, that) {
  return request({
    url: 'user/login',
    method: 'post',
    data,
    // 关键代码 cancelToken
    cancelToken: new CancelToken(function executor(c) {
      that.cancel = c
    })   
  })
}

页面中引用

import { userLoginCA } from '@/api/user'


// 调用 userLoginCA 方法时除了需要的参数,记得传this进去
    userLoginCA({
          loginPath: this.loginCode.loginPath.CA,
          accountType: this.loginCode.accountType.NATURE
        },this)
        .then((res) => {})
        .catch((res) => {})
    }

在需要调用取消的地方 执行 this.cancel('请求已取消')

// 如页面销毁的生命周期
    destroyed() {
        console.log('退出页面')
           this.cancel('请求已取消') // 关键代码
    },

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Vue如何调用接口请求头增加参数

本文链接: https://lsjlt.com/news/178219.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue如何调用接口请求头增加参数
    目录Vue调用接口请求头增加参数Vue取消接口请求接口js文件页面中引用总结Vue调用接口请求头增加参数 import axios from 'axios' import qs fr...
    99+
    2023-01-28
    Vue调用接口 Vue调用接口请求头 请求头增加参数
  • Vue如何使用axios添加请求头
    这篇“Vue如何使用axios添加请求头”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue如何使用axios添加请求头”文...
    99+
    2023-06-30
  • Java请求调用参数格式为form-data类型的接口
    接口参数使用postman调用如图所示,只能使用form-data格式调用 使用java代码发送http请求实现此种方式的接口调用 public static String doPostForm(String url, HashMap m...
    99+
    2023-08-20
    java 开发语言
  • Vue之请求如何传递参数
    目录一、get请求1、直接拼接2、params属性二、post请求1、data属性传递2、params属性传递三、常见的 Content-Type 类型1、application/x...
    99+
    2023-05-14
    Vue请求传递参数 Vue请求 Vue传递参数
  • 怎么使用cURL在PHP中POST请求增加参数
    今天小编给大家分享一下怎么使用cURL在PHP中POST请求增加参数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先,我们...
    99+
    2023-07-05
  • vue中怎么利用 proxyTable实现接口跨域请求调试
    vue中怎么利用 proxyTable实现接口跨域请求调试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。VUE解决通过proxyTable...
    99+
    2024-04-02
  • Python Selenium WebDriver 如何设置请求头用户代理(User-Agent)参数
    在本文中,将演示如何为浏览器设置用户代理,以及如何在Python Selenium WebDriver中读取用户代理。测试中的许多方案都需要操作用户代理。 什么是用户代理? User-Agent 请求...
    99+
    2023-09-05
    python selenium firefox
  • vue如何实现对请求参数进行签名
    目录前端实现请求签名1、思路2、Vue实现添加请求签名3、axios请求拦截器实现4、生成签名工具类请求参数按照ASCII码从小到大排序后追加秘钥再进行加密得到签名值代码实现总结前端...
    99+
    2023-01-28
    vue请求参数 vue签名 请求参数签名
  • vue如何输入节流,避免实时请求接口
    这篇文章给大家分享的是有关vue如何输入节流,避免实时请求接口的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、创建一个工具类,debounce.js export f...
    99+
    2024-04-02
  • 如何通过zuul添加或修改请求参数
    zuul添加或修改请求参数 一、为什么要用到这个 在基于 springcloud 构建的微服务系统中,通常使用网关zuul来进行一些用户验证等过滤的操作,比如 用户在 header ...
    99+
    2024-04-02
  • 如何处理PHP开发中的网络请求和接口调用
    网络请求和接口调用是PHP开发中非常常见且重要的一部分。在我们日常的项目中,经常需要与其他系统或者服务进行数据交互,而网络请求和接口调用就是实现这种数据交互的主要方式之一。在本文中,将介绍一些PHP中处理网络请求和接口调用的常用方法,并给出...
    99+
    2023-10-21
    PHP开发 接口调用 网络请求
  • SpringBoot如何接收Post请求Body里面的参数
    目录如何接收Post请求Body里的参数ApiPost测试数据Java接收数据SpringBoot获取参数常用方式参数在body体中PathVaribale获取url路径的数据Req...
    99+
    2024-04-02
  • golang接收post和get请求参数如何处理
    这篇文章主要讲解了“golang接收post和get请求参数如何处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang接收post和get请求参数如何处理”吧!1、golang中获取...
    99+
    2023-07-05
  • 如何将Vue的请求参数转化为json格式
    在Vue开发中,我们经常需要通过Ajax请求获取服务器端数据,而传递参数时,我们会将参数构建为一个对象或者数组,这个对象或者数组就是我们发起请求时的请求参数。但是在Vue开发中,我们经常会遇到一个问题:我们无法直接将一个复杂的对象或者数组作...
    99+
    2023-05-14
  • vue项目中如何使用axios发送请求让ajax请求头部携带cookie
    这篇文章主要为大家展示了“vue项目中如何使用axios发送请求让ajax请求头部携带cookie”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue项目中如何...
    99+
    2024-04-02
  • OpenApi Generator Golang - 添加标头以在查询参数中结束的请求如何修复?
    php小编香蕉在使用OpenApi Generator Golang时,遇到了一个问题:当在查询参数中结束请求时,如何添加标头以修复这个问题。在这篇文章中,我们将探讨这个问题的解决方案...
    99+
    2024-02-10
  • Nginx如何获取自定义请求header头和URL参数详解
    目录一、获取 header 请求头二、获取url参数总结一、获取 header 请求头 在 ngx_lua 中访问 Nginx 内置变量 ngx.var.http_HEADER 即可...
    99+
    2024-04-02
  • 使用flask如何获取post请求参数
    目录前言概述1. application/jsonhttp 请求报文格式如下:使用curlpostman 请求flask如何获取请求体呢2. application/x-www-fo...
    99+
    2024-04-02
  • Java | 使用切面AOP拦截并修改Controller接口请求参数
    关注common wx: CodingTechWork 引言   在开发过程中,会有一些需求将controller层的一些方法入参进行全量转换,最容易想到的可能是在调用下层service方法时,调用公...
    99+
    2023-09-10
    java 开发语言
  • SpringBoot2之PUT请求接收不了参数如何解决
    这篇文章主要讲解了“SpringBoot2之PUT请求接收不了参数如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot2之PUT请求接收不了参数如何解决”吧!Hidde...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作