Skip to content
On this page

axios

控制请求头不携带 Token

  1. 约定:在/api/下的工厂函数中,给某方法的参数中中加入noToken: true标记,即可不携带 Token。例如:
js
import request from '@/utils/request';

function list(params) {
  return request({
    url: '/foo/bar',
    method: 'get',
    params,
    noToken: true,
  });
}

WARNING

注意,有些框架提供的方案是在headers中加入标记,这污染了headers,不是最佳实践,不要用。

  1. 请求拦截器中写入:
js
service.interceptors.request.use(
  (config) => {
    if (getToken() && !config.noToken) {
      config.headers['Authorization'] = 'Bearer ' + getToken();
    }
    return config;
  },
  (error) => {
    Promise.reject(error);
  }
);

过滤前端的私有字段

业务代码发送 POST、PUT 请求时往往直接发送form大对象,而form中有时会包含一些前端临时使用的私有字段,这些字段不需发送到后端,此时应在拦截器中统一过滤。

TIP

约定:私有字段以下划线_开头,作为前端私有标记。

js
service.interceptors.request.use(
  (config) => {
    if (config.data) {
      for (let key in config.data) {
        if (/^_/.test(key)) {
          delete config.data[key];
        }
      }
    }
    return config;
  },
  (error) => {
    Promise.reject(error);
  }
);

杨亮的前端解决方案