2021-05-12 14:32:11
nuxt.js伺服器端渲染中axios和proxy代理的設定操作
需要npm axios?
剛開始,我以為需要像普通的vue SPA開發那樣,需要npm axios,這種方式的確可以生效。但在使用時並不方便。尤其是設定代理比較麻煩,而且在asyncData裡與在普通methods裡使用方式不一樣。
後來在nuxt的github上發現了nuxt是預設整合了axios的,所以不需要npm axios,但是需要進行適當的設定。
以上是百度到的,發現老是報錯,現在網上的教學完全是在扯淡,npm axios 是不需要安裝了,但是 @nuxtjs/axios 要安裝啊
第一步:
npm 安裝@nuxtjs/axios,檔案根目錄下安裝,指令如下
npm install @nuxtjs/axios
第二步:
在 nuxt.config.js 檔案中 設定 axios 和 proxy 代理 如下圖:
方便你複製~~~~
import pkg from './package' export default { mode: 'universal', /* ** Headers of the page */ head: { title: pkg.name, meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: pkg.description } ], link: [ { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } ] }, /* ** Customize the progress-bar color */ loading: { color: '#fff' }, /* ** Global CSS */ css: [ 'iview/dist/styles/iview.css' ], /* ** Plugins to load before mounting the App */ plugins: [ '@/plugins/iview' ], /* ** Nuxt.js modules */ modules: [ '@nuxtjs/axios' ], axios: { proxy: true, // 表示開啟代理 prefix: '/api', // 表示給請求url加個字首 /api credentials: true // 表示跨域請求時是否需要使用憑證 }, proxy: { '/api': { target: 'https://www.apiopen.top', // 目標介面域名 pathRewrite: { '^/api': '/', // 把 /api 替換成 / changeOrigin: true // 表示是否跨域 } } }, /* ** Build configuration */ build: { /* ** You can extend webpack config here */ extend(config, ctx) { }, vendor: ['axios'] // 為防止重複打包 } }
第三步:
在元件中使用
<template> <div>my</div> </template> <script> export default { created () { this.allList() }, methods: { allList () { this.$axios.post(`/novelSearchApi?name=盜墓筆記`).then(res => { console.log(res) }) } } } </script> <style scoped> </style>
補充知識:nuxt.js設定BASE_URL(基本域名)和NODE_ENV(環境變數)
一直以來,開發環境和生產環境的資料介面域名不一樣總是困擾著我
每次打測試包或者線上包,我都得手動切換域名,我相信很多人的做法跟這差不多,類似下面這樣:
(你已經注意到,這個檔案已經被我無情的刪除了,因為我發現了屬於我自己的新大陸)
每次打包都要切換註釋,雖然也能接受,但是容易忘記或者出錯,或者找這個組態檔都要找半天,
對於我這種反應遲鈍、頭腦經常性短路的人來說實在太痛苦了,
有痛點,那就要尋求解決方法:
第一步:安裝 cross-env(這個迷你的包能夠提供一個設定環境變數的scripts)
npm i cross-env -D
第二步:設定BASE_URL和NODE_ENV
我們不是有個package.json嗎,裡面是不是有個scripts物件?
// package.json { "scripts": { "dev": "cross-env BASE_URL=https://devpc.17wawawa.com NODE_ENV=development nuxt", "start": "cross-env BASE_URL=https://devpc.17wawawa.com NODE_ENV=production nuxt start", "build": "cross-env BASE_URL=https://www.17wawawa.com NODE_ENV=production nuxt build", "test": "cross-env BASE_URL=https://test.17wawawa.com NODE_ENV=production nuxt generate", "generate": "cross-env BASE_URL=https://www.17wawawa.com NODE_ENV=production nuxt generate" }, }
先寫cross-env,接著設定BASE_URL和NODE_ENV,
因為cross-env能跨平臺地設定及使用環境變數,這樣我們在執行不同的命令(npm run xxx)時,都會設定相應的BASE_URL(基本域名)和NODE_ENV(環境變數)
一定要注意,命令一定要寫在末尾,比如我上面的nuxt、nuxt start、nuxt build等等,否則 npm run 時會報錯
執行不同的命令就會自動設定不同的BASE_URL和NODE_ENV
npm run dev // BASE_URL=https://devpc.17wawawa.com NODE_ENV=development
npm run test // BASE_URL=https://test.17wawawa.com NODE_ENV=production
npm run generate // BASE_URL=https://www.17wawawa.com NODE_ENV=production
千萬別直接複製我上面的這段程式碼哦,因為每個專案的BASE_URL一般都是不一樣的,你要換成自己專案的介面請求域名
第三步:設定nuxt.config.js
package.json中的scripts設定完成之後,還要去nuxt.config.js設定一下env,官方檔案
// nuxt.config.js module.exports = { mode: 'universal', env: { BASE_URL: process.env.BASE_URL, NODE_ENV: process.env.NODE_ENV } }
第四步:如何使用
使用是最簡單的,直接寫process.env.BASE_URL就可以了,比如在我們的axios組態檔裡使用process.env.BASE_URL
或者你在任意頁面console.log(process.env.BASE_URL)都是可以列印得出來的
從此以後,只需要執行不同的打包命令就可以自動設定BASE_URL和NODE_ENV了,告別頻繁的註釋和取消註釋,瀟灑的刪除你的if...else...設定baseUrl的檔案吧!
以上這篇nuxt.js伺服器端渲染中axios和proxy代理的設定操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章