面试题答案
一键面试1. Axios全局配置及灵活调整配置的实现方式
- 全局配置
在Vue项目的入口文件(通常是
main.js
)中进行Axios的全局配置。首先引入Axios,然后使用axios.defaults
来设置全局配置。例如:
import axios from 'axios'
import Vue from 'vue'
// 设置基础URL
axios.defaults.baseURL = 'https://api.example.com'
// 设置请求超时时间
axios.defaults.timeout = 5000
Vue.prototype.$axios = axios
- 灵活调整部分配置
为了在不同业务模块中灵活调整部分配置,可以在具体的请求中传入配置对象。Axios的
request
方法接受一个配置对象,该对象会合并到全局配置上。例如:
// 在某个业务模块中
this.$axios({
url: '/specific-api',
method: 'get',
// 临时调整超时时间
timeout: 3000
})
还可以创建多个Axios实例,每个实例有独立的配置。例如:
import axios from 'axios'
// 创建一个新的Axios实例
const customAxios = axios.create({
baseURL: 'https://another-api.example.com',
timeout: 8000
})
export default customAxios
在业务模块中使用这个新实例时,就会使用其独立的配置。
2. 跨域请求时Axios配合的前端技术及原因
- CORS(跨域资源共享)
- 原因:CORS是一种机制,它使用额外的HTTP头来告诉浏览器让运行在一个origin(domain)上的Web应用被准许访问来自不同源服务器上的指定的资源。如果服务器端支持CORS,Axios发起的跨域请求就能顺利进行。在服务器端配置CORS头(如
Access - Control - Allow - Origin
等),前端Axios无需额外复杂配置,就能实现跨域请求。例如,服务器端(以Node.js Express为例)可以这样配置:
- 原因:CORS是一种机制,它使用额外的HTTP头来告诉浏览器让运行在一个origin(domain)上的Web应用被准许访问来自不同源服务器上的指定的资源。如果服务器端支持CORS,Axios发起的跨域请求就能顺利进行。在服务器端配置CORS头(如
const express = require('express')
const app = express()
app.use((req, res, next) => {
res.setHeader('Access - Control - Allow - Origin', '*')
res.setHeader('Access - Control - Allow - Methods', 'GET, POST, PUT, DELETE')
res.setHeader('Access - Control - Allow - Headers', 'Content - Type')
next()
})
- 代理(Proxy)
- 原因:在开发环境中,由于浏览器的同源策略限制,直接跨域请求会失败。使用代理可以将跨域请求转发到目标服务器,从而绕过浏览器的限制。在Vue项目中,可以通过在
vue.config.js
文件中配置代理来实现。例如:
- 原因:在开发环境中,由于浏览器的同源策略限制,直接跨域请求会失败。使用代理可以将跨域请求转发到目标服务器,从而绕过浏览器的限制。在Vue项目中,可以通过在
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'https://api.example.com',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
}
}
这样,当Axios请求以/api
开头的URL时,会被代理到https://api.example.com
,在开发环境中实现了跨域请求。