夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • 响应式

  • 组件

  • 过渡&动画

  • 可复用性

  • 工具

  • 规模化

  • 路由(核心)

  • 组合式

  • Vuex

  • Pinia

  • 其他

    • 手动渲染虚拟dom
    • 全局事件总线($bus)
    • 全局方法和属性 createAPP
    • Vue3-TS 中使用 Express
    • watch监听Props属性值失败原因
    • main.js推荐配置
    • 脚手架前期基础配置
    • 跨域之config.js配置
    • Vue中的防抖函数封装和使用
    • vue的数据更新
    • 操作本地缓存
    • api使用流程
    • ajax封装及api的获取和配置
    • vue解析n字符
    • TS获取ref绑定元素
    • 解决vue3中Props无法引入外部类型
    • vue2升vue3注意事项
  • Vue3 源码学习记录

  • 《Vue》笔记
  • 其他
夜猫子
2022-04-13

ajax封装及api的获取和配置

# 端口跨域配置

在vue.config.js文件中配置信息:

module.exports={

 pages: {
  index: {//入口
  entry: 'src/main.js',
  },
 },
 
 //打包时去掉map文件
 productionSourceMap:false,
 //关闭语法检查

 lintOnSave: false,
 // devServer: {//开启代理服务器(方式一)
 //   proxy: "http://localhost:5000"//表示代理服务器端口为5000端口,可以与已有的该端口进行交互了
 // },
    
 devServer: {
  proxy: {
      
   '/api1': {//前面加了这个符号表示走代理不走本地
	 target: 'http://39.98.123.211',
	 //要发请求时我们写的地址前面必须加上/api1这个标识来让其只走代理,
	 // 虽然地址里写的有/api1但是当正式发送请求时不能有这串代码,所以用正则来过滤掉它,
	 // 这样发送的一瞬间我们地址里的/api1就被过滤掉了
	 pathRewrite: { '^/api1': '' },//注意:这只是在代理时帮我们过滤掉了/api1,但我们写请求地址时还是要加上的
	 ws: true,//表示支持websocked
	 changeOrigin: true//允许跨域,将自己的地址隐藏为了5000,实际用于控制请求头中的host值
   },

	//配置第二个跨域端口
   '/api2': {//前面加了这个符号表示走代理不走本地
	target: 'https://api.ghser.com/qinghua',
	pathRewrite: { '^/api2': '' },
	ws: true,
	changeOrigin: true
   },
  }
 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# ajax二次封装

//对axios进行二次封装,主要是为了使用其请求和响应拦截器
import axios from "axios"
// 引入进度条
// 其中start方法代表进度条开始;done代表进度条结束
import nprogress from "nprogress";
//引入进度条的样式
import 'nprogress/nprogress.css'
// 引入仓库
import detail from "../store/detail"
// 利用axios对象方法create创造axios实例
const requests = axios.create({
    // baseURL: 基础路径,发送请求时路径里会出现并与url拼接
    //只所以要在后面添加/api1是因为我们在做代理服务器时标识了api1
    baseURL: "http://localhost:8080/api1",
    timeout: 5000,//请求超时时间
})
// 请求拦截器:在发送请求之前请求拦截器可以检测到,可以在请求发送之前做一些事情
requests.interceptors.request.use((config) => {// config为配置对象,其中有一个属性headers非常重要
    if(detail.state.getNanoId){//设置请求头,userTempId是后台设置的格式,
    //此处为为每一次请求都封装请求头,也可以在index.js中单独发送请求头
        config.headers.userTempId=detail.state.getNanoId
    }
    // 每次请求中都带上token令牌
    if(localStorage.getItem('token')){
        config.headers.token=localStorage.getItem('token')
    }
    //进度条开始动
    nprogress.start()
    return config;
})                                                                                                                                                                                                                                                                                                                                                                  
// 响应拦截器:可以在数据返回后做一些事情
requests.interceptors.response.use(
    (res) => { 
        //进度条结束
        nprogress.done();
        return res.data },
    (error) => {
        console.log(error.message);
        // 返回回调函数,终止promise
        return Promise.reject(new Error("false"))
    })

export default requests;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# api配置

// 如果项目很小完全可以在生命周期函数中发送请求,axios.get("xxx")
// api统一管理文件
import requests from "./request"
import mockRequests from "./mockAjax"

//获取购物车接口
export const reShopCard = () => {//添加请求头方式headers:{userTempId:detail.state.getNanoId}
  return requests({ url: `/api/cart/cartList`, method: 'get' })
}

// 删除购物车接口
export const reDeleteCard = (skuId) => {
  return requests({ url: `/api/cart/deleteCart/${skuId}`, method: 'delete' })
}

// 修改购物车商品选中状态接口
export const reChangeCardIsChecked = (skuId, isChecked) => {
  return requests({ url: `/api/cart/checkCart/${skuId}/${isChecked}`, method: 'get' })
}

//用户注册,有三个参数,整合到一起去,(post请求可以带请求体)
export const reRegister = (data) => {
  return requests({
    url: `/api/user/passport/register`, data: data, method: 'post'
  })
}

//提交订单
export const reSubmitOrder = (tradeNo, data) => {
  return requests({
    url: `/api/order/auth/submitOrder?tradeNo=${tradeNo}`, data, method: 'post'
  })
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# get传参的两种方式

1.直接字符串拼接

axios.get('url?xx=xx&xx=xx')
1

2.使用params传参

axios.get('url',{
	params:{
		参数:xxx
		}
})
1
2
3
4
5
编辑 (opens new window)
上次更新: 2023/7/11 18:57:41
api使用流程
vue解析n字符

← api使用流程 vue解析n字符→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式