在拦截器中设置 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.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
最有用的评论
遇到了同样的问题。 它可能更像是一个概念问题,而不是实现细节。 在我看来,设置 baseURL 是一种说“将其添加到每个请求中”的方式,当您在每个请求上设置它时,这似乎毫无意义。 尽管绝对可以为条件创建一个案例,例如:
但它不起作用。 像这样设置全局默认值:
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”值
或在每个请求
节点 v7.10.0
Axios v0.16.12