Nuxt Axios 模組 - @nuxtjs/axios ,是官方推薦使用的 HTTP Client Module
主要功能及組成有
axios
提供 HTTP Client 和 Interceptoraxios-retry
提供失敗後的自動重試機制Proxy Module
主要做 Path rewrites,拿來掛 api routes其他細節如
程式碼在這 Github
以下解說結構和作用,不貼太多原始碼
主要程式碼放在 lib 內
plugin.template.js
實作前後端載入 Axios 的 Code Templatemodule.js
彙整 options,呼叫 addPlugin() 產生實際的 axios plugin,並且傳相關設定給 proxy module進入點 lib/module.js
const path = require('path')
const consola = require('consola')
const logger = consola.withScope('nuxt:axios')
module.exports = function nuxtAxios (_moduleOptions) {
// 彙整 nuxt.config.js 中 `axios` 和 `modules` 傳入參數
// 設定預設值
// 映射環境變數,蓋掉 Axios 預設值
// 檢查 http/https,並依情況切換
// 註冊 Axios Module 的客製 Plugin
/* call addPlugins() and addTemplate() */
this.addPlugin({
src: path.resolve(__dirname, 'plugin.template.js'),
fileName: 'axios.js',
options
})
// 載入關聯模組並整合 @nuxtjs/proxy
/* call requireModule */
if (options.proxy) {
this.requireModule([
'@nuxtjs/proxy',
typeof options.proxy === 'object' ? options.proxy : {}
])
}
}
plugin.template.js
- 模組附加 axios 設定和額外功能 (上一篇 plugin 做的事也一樣)
/* 他不直接改 Axios 原型,改 instance */
/* 重新命名對應 RESTful 的 function,原名加 `$` 字前綴 */
/* config and implement: debug logs */
/* config and implement: credentials */
/* config and implement: progress */
export default (ctx, inject) {
/* 定義 plugins 對外接口與執行細節 */
// baseURL config
// header config, both of proxy and server-side encoding
// create new axios instance and extends it
// Setup interceptors
/* includes debug logs, credentials, progress, retry */
// Inject axios to the context as $axios
ctx.$axios = axios
inject('axios', axios)
}