Axios: 在拦截器中设置 baseURL 不起作用。

创建于 2017-06-09  ·  3评论  ·  资料来源: axios/axios

概括

在拦截器中设置 baseURL 不起作用。

const service = axios.create({
  baseURL: 'http://localhost/'
});

service.interceptors.request.use(config => {

  config.baseURL = 'dd'
  console.log(config.url) // output :  http://localhost/././../

  return config;
}, error => {
  // Do something with request error
  console.error(error); // for debug
  Promise.reject(error);
})

语境

  • axios 版本:例如:v0.16.2
  • 环境:例如:node vv8.0.0、chrome 59.0.3071.86、macOS 10.12

最有用的评论

遇到了同样的问题。 它可能更像是一个概念问题,而不是实现细节。 在我看来,设置 baseURL 是一种说“将其添加到每个请求中”的方式,当您在每个请求上设置它时,这似乎毫无意义。 尽管绝对可以为条件创建一个案例,例如:

axios.interceptors.request.use((config) => {
  return getAge()
  .then((age) => {
    if(age < 10){ config.baseURL = 'https://young.com' }
    else { config.baseURL = 'https://young.com' }
  })

但它不起作用。 像这样设置全局默认值:
axios.defaults.baseURL = 'https://example.com';
与通过请求传递配置一样:
axios.post('/extra', { baseURL: 'https://example.com' })

在这两种情况下,配置的“url”字段都是“ https://example.com/extra ”,但在拦截器中设置 baseURL 只会更新“config.baseURL”。 我的意思是说这是有道理的,你实际上只是在更新那个字段,但是如果它也更新了 url 字段或者至少在文档中提到(最好是粗体字),在拦截器中设置 baseURL 是很好的没用/不推荐。

@Baoyx007您始终可以手动更改配置中的“url”值

service.interceptors.request.use(config => {
  //config.baseURL = 'dd'
    config.url = BASE_URL + config.url
  return config;

或在每个请求

axios.get('/hello', { baseURL: BASE_URL })

节点 v7.10.0
Axios v0.16.12

所有3条评论

看我自定义实例默认 axios.all 不是函数 #948 我的工作正常只是 all 不是函数

遇到了同样的问题。 它可能更像是一个概念问题,而不是实现细节。 在我看来,设置 baseURL 是一种说“将其添加到每个请求中”的方式,当您在每个请求上设置它时,这似乎毫无意义。 尽管绝对可以为条件创建一个案例,例如:

axios.interceptors.request.use((config) => {
  return getAge()
  .then((age) => {
    if(age < 10){ config.baseURL = 'https://young.com' }
    else { config.baseURL = 'https://young.com' }
  })

但它不起作用。 像这样设置全局默认值:
axios.defaults.baseURL = 'https://example.com';
与通过请求传递配置一样:
axios.post('/extra', { baseURL: 'https://example.com' })

在这两种情况下,配置的“url”字段都是“ https://example.com/extra ”,但在拦截器中设置 baseURL 只会更新“config.baseURL”。 我的意思是说这是有道理的,你实际上只是在更新那个字段,但是如果它也更新了 url 字段或者至少在文档中提到(最好是粗体字),在拦截器中设置 baseURL 是很好的没用/不推荐。

@Baoyx007您始终可以手动更改配置中的“url”值

service.interceptors.request.use(config => {
  //config.baseURL = 'dd'
    config.url = BASE_URL + config.url
  return config;

或在每个请求

axios.get('/hello', { baseURL: BASE_URL })

节点 v7.10.0
Axios v0.16.12

已修复 #950

此页面是否有帮助?
0 / 5 - 0 等级