最近在趕項(xiàng)目,項(xiàng)目需要一定基礎(chǔ)錄入數(shù)據(jù),所以邊開(kāi)發(fā)邊讓同事進(jìn)行數(shù)據(jù)錄入,但是遇到了天坑!
我使用angular的http請(qǐng)求,局域網(wǎng)內(nèi)連接開(kāi)發(fā)工程,一切正常!
使用Vue的axios連接部分正常,部分不正常,服務(wù)器狀態(tài)碼200,服務(wù)器端控制臺(tái)也不報(bào)錯(cuò)。但是頁(yè)面請(qǐng)求就是報(bào)錯(cuò)。使用iPhone手機(jī)報(bào)錯(cuò),換華為安卓手機(jī)也是一樣的報(bào)錯(cuò),安卓手機(jī)不知道怎么調(diào)試,使用macOS的Safari瀏覽器可以調(diào)試iPhone手機(jī)瀏覽器,調(diào)試報(bào)錯(cuò),但是不知道原因。就單純報(bào)錯(cuò),服務(wù)器是沒(méi)有任何問(wèn)題。錯(cuò)誤代碼是200。
也就是說(shuō),我PC版本瀏覽器縮放成手機(jī)瀏覽器一切正常,真機(jī)報(bào)錯(cuò),如果說(shuō)是ssl證書(shū)等攔截,但實(shí)際上是有的請(qǐng)求報(bào)錯(cuò)有的請(qǐng)求不報(bào)錯(cuò),一般報(bào)錯(cuò)的是服務(wù)器返回一定數(shù)據(jù)的頁(yè)面會(huì)報(bào)錯(cuò)。
換成局域網(wǎng)其它PC電腦訪問(wèn),很多頁(yè)面正常,部分頁(yè)面異步請(qǐng)求不正常,所有的http請(qǐng)求都統(tǒng)一在一個(gè)axios工具里封裝的。為何有些報(bào)錯(cuò),有些不報(bào)錯(cuò)呢?太奇怪了唉。
但是在我工程開(kāi)發(fā)的本機(jī)一切全部都正常!比如區(qū)域數(shù)據(jù)加載,數(shù)據(jù)為全云南省行政區(qū)數(shù)據(jù),在我本機(jī)請(qǐng)求正常,但局域網(wǎng)其它瀏覽器訪問(wèn)就網(wǎng)絡(luò)請(qǐng)求報(bào)錯(cuò),控制臺(tái)顯示為incomplete encoding?
但是編碼都是utf-8完全和其它請(qǐng)求和返回一致。我本機(jī)也可以正常加載,更離奇的是,打包成生產(chǎn)模式部署到阿里云服務(wù)器上也全部正常,就局域網(wǎng)跨電腦訪問(wèn)就異常,也不是全部異常,就是那么部分接口異常。
使用的代碼為ant design vue pro后臺(tái)管理模板預(yù)設(shè)的axios封裝,代碼如下:
- import Vue from 'vue'
- import axios from 'axios'
- import store from '@/store'
- import notification from 'ant-design-vue/es/notification'
- import { VueAxios } from './vueAxios'
- import { ACCESS_TOKEN, ENTERPRISE_TOKEN } from '@/store/mutation-types'
- import Constant from '@/config/ann.config'
- // 創(chuàng)建 axios 實(shí)例
- const service = axios.create({
- baseURL: Constant.API_URL, // api base_url
- timeout: 6000 // 請(qǐng)求超時(shí)時(shí)間
- })
- const err = (error) => {
- if (error.response) {
- const data = error.response.data
- const token = Vue.ls.get(ACCESS_TOKEN)
- if (error.response.status === 403) {
- notification.error({
- message: 'Forbidden',
- description: data.message
- })
- }
- if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
- notification.error({
- message: 'Unauthorized',
- description: 'Authorization verification failed'
- })
- if (token) {
- store.dispatch('Logout').then(() => {
- setTimeout(() => {
- window.location.reload()
- }, 1500)
- })
- }
- }
- }
- return Promise.reject(error)
- }
- // request interceptor
- service.interceptors.request.use(config => {
- // 登錄用戶身份認(rèn)證Token
- const token = Vue.ls.get(ACCESS_TOKEN)
- if (token) {
- config.headers['Ann-Token'] = token // 讓每個(gè)請(qǐng)求攜帶自定義 token 請(qǐng)根據(jù)實(shí)際情況自行修改
- }
- // 當(dāng)前操作企業(yè)授權(quán)Token
- const tokenE = Vue.ls.get(ENTERPRISE_TOKEN)
- if (tokenE) {
- config.headers['Ann-E-Token'] = tokenE // 讓每個(gè)請(qǐng)求攜帶自定義 token 請(qǐng)根據(jù)實(shí)際情況自行修改
- }
- return config
- }, err)
- // response interceptor
- service.interceptors.response.use((response) => {
- return response.data
- }, err)
- const installer = {
- vm: {},
- install (Vue) {
- Vue.use(VueAxios, service)
- }
- }
- export {
- installer as VueAxios,
- service as axiosService
- }
- 有沒(méi)有遇到同樣問(wèn)題的道友呢?