最近使用nuxtjs服務端渲染框架,在異步請求時遇到兩個問題,一是怎么使用axios, 二是怎么在asyncData方法中使用axios
當使用腳手架create nuxt-app創建項目時,會提示是否集成axios, 如果不選擇,后面則使用方式一請求異步數據,如果選擇,后面則使用方式二請求異步數據
如上圖,按照提示到選擇axios的步驟,鍵盤"up", "down"移動箭頭,space空格鍵選擇或者取消, 然后繼續enter進入下一步即可。
方法一:普通的方式
1 .npm或者yarn安裝依賴包
1 $ npm install axios -S
2 . 引入到組件中
1 import axios from 'axios'; 2 3 export default { 4 /* 其他代碼 */ 5 // 使用Promise 6 asyncData ({params}) { 7 return axios.get(`https://maoyan.com/ajax/cities`) 8 .then(res => { 9 console.log(res) 10 }) 11 } 12 13 // 使用 async ... await , 與Promise選擇一種即可 14 async asyncData({params}) { 15 let { res } = await axios.get(`https://maoyan.com/ajax/cities`) 17 console.log(res) 18 } 19 20 /*其他代碼*/ 21 }
方法二:集成的方式
首先需要在配置文件nuxt.config.js中配置axios項
1 modules: [ 2 '@nuxtjs/axios', 3 '@nuxtjs/bulma' 4 ], 5 /* 需要使用 aixos必須配置以下兩項axios和proxy*/ 6 axios: { 7 prefix: '/api/', 8 proxy: true 9 }, 10 11 proxy: { 12 '/api/': { 13 target: 'https://maoyan.com/', 14 pathRewrite: { 15 '^/api/': '' 16 } 17 } 18 },
在組件中使用axios, 無需在import引入, 直接使用this.$axios即可
1 // 這里引入context是上下文參數,代替了this, 2 // 因為在asyncData方法是在組件初始化時調用,所以沒法通過this來引用組件實例對象。 3 asyncData(context) { 4 return context.$axios.get('ajax/cities') 5 .then(res => { 6 console.log(res) 7 }) 8 }