接口的书写 vue

ajax.js中的内容

ajax.js的内容

//这个文件是对axios进行二次封装
//额外的让axios发请求的时候,具有其它的功能
// 配置基础路径和超时限制
// 添加进度条信息  nprogress
// 返回的响应不再需要从data属性当中拿数据,而是响应就是我们要的数据
// 统一处理请求错误, 具体请求也可以选择处理或不处理
import axios from 'axios'
// 引入nprogress相关的js和css
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import store from '@/store'

//以后只要是对axios二次封装,不会在axios身上直接去封装,而是创建一个新的axios实例进行封装
//axios.create()创建一个新的和axios具有相同功能的一个实例
const service = axios.create({
  //配置基础路径和超时限制
  baseURL: '/api',  //设置,当前项目当中所有接口路径的公共路径部分,基础路径
  timeout: 20000,//当ajax请求超过设置的这个事件就会报错
});


// 添加进度条信息功能  nprogress
// 以后如果你想对axios添加额外的功能或者是给请求头添加额外的信息
// 必然用到axios的请求拦截器和响应拦截器

//请求拦截器,每个ajax请求都要经过这个拦截器去拦截
service.interceptors.request.use(
  // 请求拦截器当中成功的回调
  (config)=>{
    // config其实就是我们的请求报文
    // 这个请求报文,最后一定要返回去,因为还要继续往下走
    //在这里我们可以添加额外的功能,也可以给请求头添加需要的数据
    NProgress.start(); //开启进度条

    //请求头内部需要添加临时标识,后期每个请求都会带上这个临时标识
    let userTempId = store.state.user.userTempId
    if(userTempId){
      config.headers.userTempId = userTempId
    }

    //登录成功后,需要把token添加到请求头当中,从今往后所有的请求当中都要带上这个token
    let token = store.state.user.token
    if(token){
      config.headers.token = token
    }


    return config
  },
  // 请求拦截器当中失败的回调一般不写,因为失败了,也就没有下文了
  // () => {
  // }
);

//响应拦截器
//返回的响应不再需要从data属性当中拿数据,而是响应就是我们要的数据
//统一处理请求错误, 具体请求也可以选择处理或不处理
service.interceptors.response.use(
  (response) => {
    //response其实就是我们的响应报文
    //我们也是可以添加额外功能或者对响应报文进行处理
    NProgress.done(); //停止进度条
    return response.data //返回的响应不再需要从data属性当中拿数据,而是响应就是我们要的数据
  },
  (error) => {
    NProgress.done(); //停止进度条
    //可以统一处理错误
    alert('发送ajax请求失败'+error.message||'未知错误')
    //统一处理完成之后,这个错误可以让后面继续处理
    // return Promise.reject(new Error('发送ajax请求失败')) //后面想继续处理这个错误,返回失败的promise
    //也可以不让后面继续处理这个错误,中断promise链
    return new Promise(() => {})  //返回的是pending状态的promise,代表中断promise链,后期也就没办法处理了
  }
);


export default service  //把封装好的axios实例,暴露出去,后面去用









index.js中的内容在这里插入图片描述

//这个文件写的都是函数,我们叫接口请求函数
//以后,我们的每个接口都对应了一个函数,如果想要拿相关接口的数据,只需要调用相关的接口请求函数
//axios使用   函数用法  对象用法
// 三种参数   params参数  query参数  请求体参数
// params参数 是在url当中携带的,属于路径一部分
// query参数,可以在url当中携带 ?分割,后面就是query参数
              // 也可以在配置对象当中配置,配置的属性名叫params
// 请求体参数,在配置对象当中data里面配置,请求方式是put和post才有请求体参数

// axios({
//   url:'localhost:8080/userinfo/1?name=zhaoliying',
//   method:,
//   params:{
//     //代表的是query参数
//     name:'zhaoliying'
//   },
//   data:{
//     //配的是请求体参数
//   }
// })

import request from './ajax'
import mockAjax from '@/api/mockAjax'
//请求三级分类列表数据
///api/product/getBaseCategoryList
//get
//无参
export const reqCategoryList = () => {
  return request({
    url:'/product/getBaseCategoryList',
    method:'get'
  })
}



//验证请求是否成功
// reqCategoryList()    //这里如果要调用,得把模块引入到main当中


//请求获取模拟接口的数据banner和floor

export const reqBannerList = () => {
  return mockAjax({
    url:'/banner',
    method:'get'
  })
}


export const reqFloorList = () => {
  return mockAjax({
    url:'/floor',
    method:'get'
  })
}

//请求获取search页面的数据
// /api/list
// post
// 请求体参数,一个对象
export const reqSearchInfo = (searchParams) => {
  return request({
    url:'/list',
    method:'post',
    data:searchParams//searchParams是用户搜索的参数,这个参数是用户在发请求的时候给传递的
  })
}
//这个请求参数,searchParams必须是一个对象,可以是空对象,但是必须传,不能不传
//其实用户发请求的时候,这个参数给空对象{},也是可以获取到数据的,代表获取商品默认搜索的数据
// 测试
// reqSearchInfo({})



// 请求获取详情数据
///api/item/{ skuId }
//get

export const reqDetailInfo = (skuId) => {
  return request({
    url:`/item/${ skuId }`,
    method:'get'
  })
}

// 请求添加购物车(修改购物车的商品数量)
// /api/cart/addToCart/{ skuId }/{ skuNum }
// POST
export const reqAddOrUpdateShopCart = (skuId,skuNum) => {
  return request({
    url:`/cart/addToCart/${ skuId }/${ skuNum }`,
    method:'post'
  })
}


//请求获取购物车页面数据
// /api/cart/cartList
// get

export const reqshopCartInfo = () => {
  return request({
    url:'/cart/cartList',
    method:'get'
  })
}


//请求修改购物车选中状态
///api/cart/checkCart/{skuId}/{isChecked}
// GET
export const reqUpdateCartIscheck = (skuId,isChecked) => {
  return request({
    url:`/cart/checkCart/${skuId}/${isChecked}`,
    method:'get'
  })
}


//请求删除购物车数据
///api/cart/deleteCart/{skuId}
//DELETE

export const reqDeleteShopCart = (skuId) => {
  return request({
    url:`/cart/deleteCart/${skuId}`,
    method:'delete'
  })
}


//请求注册用户
///api/user/passport/register
//post
//参数:请求体  code  phone  password


export const reqUserRegister = (userInfo) => {
  return request({
    url:'/user/passport/register',
    method:'post',
    data:userInfo
  })
}

//请求获取用户注册验证码
///api/user/passport/sendCode/{phone}
//get
export const reqGetCode = (phone) => {
  return request({
    url:`/user/passport/sendCode/${phone}`,
    method:'get'
  })
}


//请求用户登录
///api/user/passport/login
//post
//返回   这里返回的东西不严谨,按道理来讲,登录成功以后,只返回token,不会有其它的数据
//而其它的用户数据,需要重新根据token发请求获取(token校验)

// data:{
//   nickName:"Administrator",
//   name:"Admin",
//   token: 90aa16f24d04c7d882051412f9ec45b"
//   }

export const reqUserLogin = (userInfo) => {
  return request({
    url:'/user/passport/login',
    method:'post',
    data:userInfo
  })
}
  

//根据token请求获取用户的信息
///api/user/passport/auth/getUserInfo
//参数token已经在请求头当中添加了
//get

export const reqGetUserInfo = () => {
  return request({
    url:'/user/passport/auth/getUserInfo',
    method:'get'
  })
}


//请求退出登录
///api/user/passport/logout
//get

export const reqUserLogout = () => {
  return request({
    url:'/user/passport/logout',
    method:'get'
  })
}

//请求获取用户的收货地址信息
///api/user/userAddress/auth/findUserAddressList
//get

export const reqUserAddressList = () => {
  return request({
    url:'/user/userAddress/auth/findUserAddressList',
    method:'get'
  })
}

//请求获取订单交易页面信息
///api/order/auth/trade
//get

export const reqTradeInfo = () => {
  return request({
    url:'/order/auth/trade',
    method:'get'
  })
}


// reqUserAddress()
// reqTradeInfo()

//请求提交创建订单
///api/order/auth/submitOrder?tradeNo={tradeNo}
//post

export const reqSubmitOrder = (tradeNo,tradeInfo) => {
  return request({
    url:`/order/auth/submitOrder?tradeNo=${tradeNo}`,
    method:'post',
    data:tradeInfo
  })
}

//请求获取支付信息
// /api/payment/weixin/createNative/{orderId}
//get
export const reqPayInfo = (orderId) => {
  return request({
    url:`/payment/weixin/createNative/${orderId}`,
    method:'get'
  })
}


// 请求获取订单支付状态
// /api/payment/weixin/queryPayStatus/{orderId}
// get

export const reqPayStatus = (orderId) => {
  return request({
    url:`/payment/weixin/queryPayStatus/${orderId}`,
    method:'get'
  })
}

//请求获取我的订单列表数据
///api/order/auth/{page}/{limit}
//get

export const reqMyOrderInfo = (page,limit) => {
  return request({
    url:`/order/auth/${page}/${limit}`,
    method:'get'
  })
}


mockAjax.js中的内容在这里插入图片描述

//这个文件是对axios进行二次封装
//额外的让axios发请求的时候,具有其它的功能
// 配置基础路径和超时限制
// 添加进度条信息  nprogress
// 返回的响应不再需要从data属性当中拿数据,而是响应就是我们要的数据
// 统一处理请求错误, 具体请求也可以选择处理或不处理
import axios from 'axios'
// 引入nprogress相关的js和css
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

//以后只要是对axios二次封装,不会在axios身上直接去封装,而是创建一个新的axios实例进行封装
//axios.create()创建一个新的和axios具有相同功能的一个实例
const service = axios.create({
  //配置基础路径和超时限制
  baseURL: '/mock',  //设置,当前项目当中所有接口路径的公共路径部分,基础路径
  timeout: 20000,//当ajax请求超过设置的这个事件就会报错
});


// 添加进度条信息功能  nprogress
// 以后如果你想对axios添加额外的功能或者是给请求头添加额外的信息
// 必然用到axios的请求拦截器和响应拦截器

//请求拦截器,每个ajax请求都要经过这个拦截器去拦截
service.interceptors.request.use(
  // 请求拦截器当中成功的回调
  (config)=>{
    // config其实就是我们的请求报文
    // 这个请求报文,最后一定要返回去,因为还要继续往下走
    //在这里我们可以添加额外的功能,也可以给请求头添加需要的数据
    NProgress.start(); //开启进度条
    return config
  },
  // 请求拦截器当中失败的回调一般不写,因为失败了,也就没有下文了
  // () => {
  // }
);

//响应拦截器
//返回的响应不再需要从data属性当中拿数据,而是响应就是我们要的数据
//统一处理请求错误, 具体请求也可以选择处理或不处理
service.interceptors.response.use(
  (response) => {
    //response其实就是我们的响应报文
    //我们也是可以添加额外功能或者对响应报文进行处理
    NProgress.done(); //停止进度条
    return response.data //返回的响应不再需要从data属性当中拿数据,而是响应就是我们要的数据
  },
  (error) => {
    NProgress.done(); //停止进度条
    //可以统一处理错误
    alert('发送ajax请求失败'+error.message||'未知错误')
    //统一处理完成之后,这个错误可以让后面继续处理
    // return Promise.reject(new Error('发送ajax请求失败')) //后面想继续处理这个错误,返回失败的promise
    //也可以不让后面继续处理这个错误,中断promise链
    return new Promise(() => {})  //返回的是pending状态的promise,代表中断promise链,后期也就没办法处理了
  }
);


export default service  //把封装好的axios实例,暴露出去,后面去用









mockServer.js中的内容

在这里插入图片描述

//这个文件就是专门来模拟mock数据接口的
import Mock from 'mockjs'
import banner from './banner.json'
import floor from '@/mock/floor'

//这两行就是在模拟数据接口
Mock.mock('/mock/banner',{code:200,data:banner}) //第一个参数,代表我们以后请求的路径,第二个参数代表返回的数据
Mock.mock('/mock/floor',{code:200,data:floor}) //第一个参数,代表我们以后请求的路径,第二个参数代表返回的数据

banber.json中的内容

[
  {
      "id":"1",
      "imgUrl":"/images/banner1.jpg"
  },
  {
      "id":"2",
      "imgUrl":"/images/banner2.jpg"
  },
  {
      "id":"3",
      "imgUrl":"/images/banner3.jpg"
  },
  {
      "id":"4",
      "imgUrl":"/images/banner4.jpg"
  }
]

floor.json中的内容

[{
  "id": "001",
  "name": "家用电器",
  "keywords": ["节能补贴", "4K电视", "空气净化器", "IH电饭煲", "滚筒洗衣机", "电热水器"],
  "imgUrl": "/images/floor-1-1.png",
  "navList": [{
          "url": "#",
          "text": "热门"
      },
      {
          "url": "#",
          "text": "大家电"
      },
      {
          "url": "#",
          "text": "生活电器"
      },
      {
          "url": "#",
          "text": "厨房电器"
      },
      {
          "url": "#",
          "text": "应季电器"
      },
      {
          "url": "#",
          "text": "空气/净水"
      },
      {
          "url": "#",
          "text": "高端电器"
      }
  ],
  "carouselList": [{
          "id": "0011",
          "imgUrl": "/images/floor-1-b01.png"
      },
      {
          "id": "0012",
          "imgUrl": "/images/floor-1-b02.png"
      },
      {
          "id": "0013",
          "imgUrl": "/images/floor-1-b03.png"
      }
  ],
  "recommendList": [
      "/images/floor-1-2.png",
      "/images/floor-1-3.png",
      "/images/floor-1-5.png",
      "/images/floor-1-6.png"
  ],
  "bigImg": "/images/floor-1-4.png"
},
{
  "id": "002",
  "name": "手机通讯",
  "keywords": ["节能补贴2", "4K电视2", "空气净化器2", "IH电饭煲2", "滚筒洗衣机2", "电热水器2"],
  "imgUrl": "/images/floor-1-1.png",
  "navList": [{
          "url": "#",
          "text": "热门2"
      },
      {
          "url": "#",
          "text": "大家电2"
      },
      {
          "url": "#",
          "text": "生活电器2"
      },
      {
          "url": "#",
          "text": "厨房电器2"
      },
      {
          "url": "#",
          "text": "应季电器2"
      },
      {
          "url": "#",
          "text": "空气/净水2"
      },
      {
          "url": "#",
          "text": "高端电器2"
      }
  ],
  "carouselList": [{
          "id": "0011",
          "imgUrl": "/images/floor-1-b01.png"
      },
      {
          "id": "0012",
          "imgUrl": "/images/floor-1-b02.png"
      },
      {
          "id": "0013",
          "imgUrl": "/images/floor-1-b03.png"
      }
  ],
  "recommendList": [
      "/images/floor-1-2.png",
      "/images/floor-1-3.png",
      "/images/floor-1-5.png",
      "/images/floor-1-6.png"
  ],
  "bigImg": "/images/floor-1-4.png"
}
]

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值