• vue---发送数据请求的一些列的问题


    使用vue做数据请求,首先考虑的是封装请求方法request.js

    import axios from 'axios'
    import Qs from 'qs'
    
    // 创建一个axios实例
    const service = axios.create({
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',    
        // 'content-type': 'application/json;charset=UTF-8',
        // 'x-token': 'one' 
      },
      // baseURL: 'http://dianphp.fyz.com',
      baseURL: '/',
      method: 'post',
      transformRequest:[function(data){
        return Qs.stringify(data)
      }],
      withCredentials: true,
      timeout: 5000
    })
    
    // 添加请求拦截器
    service.interceptors.request.use(config => {
      // 在发送请求之前做某事,比如说 设置token
      // config.headers['token'] = 'token';
      config.headers['x-token'] = 'xxxxxxxxxxxxxxxxxxx';
      return config;
    }, error => {
      // 请求错误时做些事
      return Promise.reject(error);
    });
    
    // 添加响应拦截器
    service.interceptors.response.use(response => {
      const res = response.data;
      // // 如果返回的状态不是200 就主动报错
      // if(res.state != 200){
      //   return Promise.reject(res.message || 'error')
      // }
      return res;
    }, error => {
        return Promise.reject(error.response.data); // 返回接口返回的错误信息
    })
    
    export default service

    这里需要注意的是baseURL,不要写服务器的地址,如果这里配置服务器的地址就会报跨域的错误

    这里解决跨域的问题是在 config 目录下的 dev 里面进行配置proxyTable:

    proxyTable: {
        '/api': {
            target: 'http://dianphp.fyz.com',
            changeOrigin: true,
            pathRewrite: {
                '^/api': '/api'
            }
        }
    },

    其次是在开发过程中后存在OPTIONS跨域的问题,我使用的是thinkphp,可能是thinkphp的路由问题,配置的时候需要配置 options请求

    return [
        // 'api/user/login' => 'api/user/login',
        'api/user/login' => ['api/user/login',['method' => 'post|get|options']],
    ];

    然后请求参数里面添加 header:

    public function login(){
        header('Access-Control-Allow-Origin: *');
        $list = $this->getlayuilist();
        return $list;
    }

    request.js的使用方法:

    1、新建 api/role.js

    role.js

    import request from '@/utils/request'
    
    class RoleService{
      getRoutes(data){
        return request({
          url: '/api/user/login',
          method: 'post',
        })
        // return request({
        //   url: '/api/user/login',
        //   method: 'post',
        //   data:data
        // })
      }
    
      getRoles() {
        return request({
          url: '/roles',
          method: 'get'
        })
      }
    
      addRole(data) {
        return request({
          url: '/role',
          method: 'post',
          data
        })
      }
    
      updateRole(id, data) {
        return request({
          url: `/role/${id}`,
          method: 'put',
          data
        })
      }
    
      deleteRole(id) {
        return request({
          url: `/role/${id}`,
          method: 'delete'
        })
      }
    }
    
    export default new RoleService()

    具体组件的使用:

    import roleApi from '@/api/role'

    使用方法:

    roleApi.getRoutes().then(res => {
      console.log(res);
      console.log('请求成功');
    })
  • 相关阅读:
    漫谈设计模式(三):桥接(Bridge)模式 —— 将类功能、结构两层次分离
    深入理解spring中的AOP原理 —— 实现MethodInterceptor接口,自已动手写一个AOP
    Python面向对象之什么是类(1)
    Python常用模块之logging模块
    Python常用模块之xml模块
    Python常用模块之hashlib
    linux基础命令(一)
    DateTime字段控件值显示短格式的做法
    .net中除去IList中的多余项
    jquery点击按钮显示和隐藏DIv
  • 原文地址:https://www.cnblogs.com/e0yu/p/11088798.html
Copyright © 2020-2023  润新知