鍍金池/ 問答/HTML/ nuxt.js項(xiàng)目中axios的配置應(yīng)該怎么寫?

nuxt.js項(xiàng)目中axios的配置應(yīng)該怎么寫?

我將axios的配置文件放在plugins/axios.js中,代碼如下:

import axios from 'axios'
import qs from 'qs'

const hotName = location.hostname
if (hotName === 'localhost') {
  axios.defaults.baseURL = `//xxxx.com/api`
  axios.defaults.withCredentials = true
} else {
  axios.defaults.baseURL = `//${hotName}/api`
  axios.defaults.withCredentials = true
}
axios.defaults.baseURL = `//ask.hishixi.com/api`
axios.defaults.withCredentials = true
// POST傳參序列化
axios.interceptors.request.use((config) => {
 if (config.method === 'post') {
  config.data = qs.stringify(config.data)
 }
 return config
}, (error) => {
 return Promise.reject(error)
})

// 返回狀態(tài)判斷
axios.interceptors.response.use(function (res) {
  return res.data
}, function (error) {
  return Promise.reject(error)
})
  

export function fetch (url, params) {
 return new Promise((resolve, reject) => {
  axios.post(url, params)
   .then(res => {
    resolve(res.data)
   })
   .catch((error) => {
    reject(error)
   })
 })
}
export default {
 // 獲取導(dǎo)航信息
 getHeaderList () {
    return axios.get('/Index/headerUrl')
 }
}

頁面中使用:

import axios from '../plugins/axios'

export default {
  asyncData ({}) {
    return axios.getHeaderList().then(res => {

    })
  }
}

保存后刷新頁面報(bào)錯(cuò):

clipboard.png

clipboard.png

這是為什么呢?我在mounted中請(qǐng)求是沒有問題的
還有一個(gè)問題是,在axios.js中我想根據(jù)hostname來配置axios的baseURL,但是讀不到hostname?

回答
編輯回答
女流氓

你的plugin/axios.js沒有l(wèi)ocation這個(gè)變量。
要么你在.vue文件的created/mounted里讀取location,要么直接把hostname寫在dev.config.jsprod.config.js,按開發(fā)/生產(chǎn)環(huán)境區(qū)分。
分清出你的代碼是在nodejs還是在瀏覽器運(yùn)行的。
順便,簡(jiǎn)單測(cè)試的報(bào)錯(cuò)如下(打開localhost:3000/test頁面顯示的內(nèi)容):
圖片描述

2018年5月2日 02:13