在 VueJS 中为 Get、Post、Patch 配置全局 Headers 的最佳方法
Best way to config Global Headers for Get, Post, Patch in VueJS
我是 VueJs 的新手,我正在寻找为 Get、Post、VueJS 中的补丁配置全局 Headers 的最佳方法,易于使用且强大的安全性。目前我只是为每个组件将它写在 export default {}
中,我知道这很糟糕。所以请大家帮忙
已修复,感谢@Hardik Satasiya
~/plugins/axios.js
每个组件:
import axios from 'axios'
var api = axios.create({
baseURL: 'http://localhost:8000/api/v1/',
headers: {'Authorization': 'JWT ' + store.state.token}
})
export default api
问题:无法将存储传输到 axios.create,因此 store is not defined
您可以使用 vue-resource
for making http requests and then use interceptors
到 modify/patch 请求。
Vue.http.interceptors.push(function(request, next) {
// modify method
request.method = 'POST';
// modify headers
request.headers.set('X-CSRF-TOKEN', 'TOKEN');
request.headers.set('Authorization', 'Bearer TOKEN');
// continue to next interceptor
next();
});
是的,使用 axios
是个好主意,因为它的存储库得到了维护。
你可以为此使用全局配置
import axios from 'axios';
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
OR best way is to create separate instances
for this (if you are using multiple api
at same time)
import axios from 'axios';
var myApi = axios.create({
baseURL: 'https://my-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'CustomHeader1'}
});
// another api service
var amazonApi = axios.create({
baseURL: 'https://amazon-domain.com/api/',
timeout: 2000,
headers: {'X-Custom-Header': 'CustomHeader2'}
});
export default {
myApi,
amazonApi
}
所以你可以单独使用api
而不会有任何冲突。
if you are setting auth header it's nice to not set it at instance creation instead you can set it in your ready callback
so you can either fetch from localStorage
or obtain from the third party and you can set it.
在创建后header更改
myApi.defaults.headers.authorization = 'JWT ' + yourToken;
所以你可以从任何部分设置 header 当你确定你有 token 然后你可以使用这个代码来设置 header。
如果您已经通过乞讨获得 header,您也可以使用此代码进行设置。
ON YOUR MAIN.JS
import axios from "axios";
const base = axios.create({
baseURL: "http://127.0.0.1:8000/",
});
Vue.prototype.$http = base;
Vue.prototype.$http.interceptors.request.use(
config => {
let accessToken = localStorage.getItem('token');
if (accessToken) {
config.headers = Object.assign({
Authorization: `Bearer ${accessToken}`
}, config.headers);
}
return config;
},
error => {
return Promise.reject(error);
}
);
我是 VueJs 的新手,我正在寻找为 Get、Post、VueJS 中的补丁配置全局 Headers 的最佳方法,易于使用且强大的安全性。目前我只是为每个组件将它写在 export default {}
中,我知道这很糟糕。所以请大家帮忙
已修复,感谢@Hardik Satasiya
~/plugins/axios.js
每个组件:
import axios from 'axios'
var api = axios.create({
baseURL: 'http://localhost:8000/api/v1/',
headers: {'Authorization': 'JWT ' + store.state.token}
})
export default api
问题:无法将存储传输到 axios.create,因此 store is not defined
您可以使用 vue-resource
for making http requests and then use interceptors
到 modify/patch 请求。
Vue.http.interceptors.push(function(request, next) {
// modify method
request.method = 'POST';
// modify headers
request.headers.set('X-CSRF-TOKEN', 'TOKEN');
request.headers.set('Authorization', 'Bearer TOKEN');
// continue to next interceptor
next();
});
是的,使用 axios
是个好主意,因为它的存储库得到了维护。
你可以为此使用全局配置
import axios from 'axios';
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
OR best way is to create separate
instances
for this (if you are usingmultiple api
at same time)
import axios from 'axios';
var myApi = axios.create({
baseURL: 'https://my-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'CustomHeader1'}
});
// another api service
var amazonApi = axios.create({
baseURL: 'https://amazon-domain.com/api/',
timeout: 2000,
headers: {'X-Custom-Header': 'CustomHeader2'}
});
export default {
myApi,
amazonApi
}
所以你可以单独使用api
而不会有任何冲突。
if you are setting auth header it's nice to not set it at instance creation instead you can set it in your
ready callback
so you can either fetch fromlocalStorage
or obtain from the third party and you can set it.
在创建后header更改
myApi.defaults.headers.authorization = 'JWT ' + yourToken;
所以你可以从任何部分设置 header 当你确定你有 token 然后你可以使用这个代码来设置 header。 如果您已经通过乞讨获得 header,您也可以使用此代码进行设置。
ON YOUR MAIN.JS
import axios from "axios";
const base = axios.create({
baseURL: "http://127.0.0.1:8000/",
});
Vue.prototype.$http = base;
Vue.prototype.$http.interceptors.request.use(
config => {
let accessToken = localStorage.getItem('token');
if (accessToken) {
config.headers = Object.assign({
Authorization: `Bearer ${accessToken}`
}, config.headers);
}
return config;
},
error => {
return Promise.reject(error);
}
);