一、跨域问题
跨域:不同协议,不同域名或不同端口号都叫做跨域。
解决方法:配置代理 comfig --> index.js
proxyTable: {
'api' : {
target: 请求后台的地址接口,如 'http://localhost:3000',
changeOrigin: true,
pathRewrite: {
'^/api': 'http://localhost:3000'
}
}
}
二、axios: 基于promise用于浏览器和node.js的http客户端。
axios支持浏览器和node.js、支持promise, 能拦截请求和响应、能转换请求和响应数据、 能取消请求、 自动转换JSON数据、 浏览器端支持防止CSRF(跨站请求伪造)。
全局配置:
axios.defaults.timeout = 3000; 超时时间
axios.defaults.baseURL='http://localhost:3000'; 默认地址
axios.defaults.headers['mytoken']='..'; 请求头
- 请求方法:
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
}).then(res => {});
axios({
method: 'get',
url: '/user/12345',
params: {
firstName: 'Fred',
lastName: 'Flintstone'
}
}).then(res => {});
axios API:
axios.get(url[, config])
axios.delete(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
执行多个并发请求:
axios.all()
- 以application / x-www-form-urlencoded格式发送数据:
1. 浏览器:
const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);
2. qs库编码数据:
const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));
或:
import qs from 'qs';
const data = { 'bar': 123 };
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data: qs.stringify(data),
url,
};
axios(options);
或:
const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));
三、axios拦截器
1. 请求拦截器:
axios.interceptors.request.use((config) => {
if(!res.data.isok){
alert(res.data.info)
}
return res
}, (err) => {
return Promise.reject(err);
})
2. 响应拦截器:
axios.interceptors.response.use((res) => {
config.token = '';
return res
}, (err) => {
return Promise.reject(err);
})
四、token
在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。
1、Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示。
2、Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
3、Token的目的是为了减轻服务器的压力,减少频繁的查询数据库。
五、响应结构
{
// `data` 由服务器提供的响应
data: {},
// `status` 来自服务器响应的 HTTP 状态码
status: 200,
// `statusText` 来自服务器响应的 HTTP 状态信息
statusText: 'OK',
// `headers` 服务器响应的头
headers: {},
// `config` 是为请求提供的配置信息
config: {},
// 'request'
// `request` is the request that generated this response
// It is the last ClientRequest instance in node.js (in redirects)
// and an XMLHttpRequest instance the browser
request: {}
}