安装

  1. npm i @nuxtjs@axios

在 plugin 下创建 axios.js 并配置

目的:对 axios 进行简单的封装。

  1. import { message } from 'ant-design-vue/lib'
  2. export default function ({store, redirect, app:{$axios}}){
  3. // 数据访问前缀
  4. $axios.default.baseURL = 'http://test.com/api'
  5. // request 请求拦截器,此处设置了一个 token为例
  6. $axios.onRequest(config =>{
  7. config.header.common['X-Access-Token'] = store.state.token
  8. })
  9. $axios.onError = (error => {
  10. })
  11. // response 响应拦截器,数据返回后,在这里进行简单的处理之后返回
  12. $axios.interceptors.response.use(response => {
  13. if(response.data.success === false){
  14. if(response.data.errMsg === '未登录'){
  15. redirect('/login')
  16. }
  17. return message.error(response.data.errMsg)
  18. }else if{
  19. message.success(response.data.errMsg)
  20. }else{
  21. return response.data
  22. }
  23. })
  24. }

配置 nuxt.config.js

  1. module.exports = {
  2. plugins:[
  3. '~/plugin/axios' // 封装的 axios 方法
  4. ],
  5. modules: [
  6. '@nuxtjs/axios'
  7. ],
  8. // -----------
  9. // 需要使用代理
  10. axios: {
  11. profix: '/api', // 在请求路径前面加上 api
  12. proxy: true
  13. },
  14. proxy: {
  15. '/api': {
  16. target: 'http://test.com', // 代理的地址
  17. pathRewrite: {
  18. '^/api': '' // 对 api 进行替换
  19. }
  20. }
  21. }
  22. // -----------
  23. }
  24. /*
  25. 当我们使用axios发送请求时
  26. 如果你使用axios发送请求且路径是/helo/hello,
  27. 那么会被axios中的prefix属性加上前缀,即/app/helo/helo
  28. 而proxy会使得请求变为,http://127.0.0.1:8080/app/helo/helo
  29. 而pathRewrite会把请求变为 http://127.0.0.1:8080/test/helo/helo
  30. */

在 非ssr 中使用,和在vue 中使用是一样的

  1. getData(){
  2. this.$axios.get('/getlist')
  3. .then(res =>{
  4. this.list = res.data
  5. })
  6. }

ssr 中使用,也就是在渲染页面之前把数据返回

  1. // list.vue
  2. export default{
  3. data(){
  4. // 定义好 需要使用的数据
  5. return {
  6. // 博客列表数据
  7. blogList:[],
  8. // 博客总条数
  9. blogTotal:0,
  10. // 友情链接数据
  11. friendList:[],
  12. }
  13. },
  14. async asyncData(context){ // 这个 context 可以当作 this 来使用
  15. let params = {
  16. page: 1,
  17. blogCid: '1'
  18. }
  19. // 请求数据
  20. let [ res1, res2 ] = await Promise.all([
  21. context.$axios.post('/getlist', params)
  22. .then(res =>{
  23. return res
  24. });
  25. context.$axios.get('/api')
  26. .then(res =>{
  27. retrn res
  28. })
  29. ])
  30. // 返回数据
  31. return {
  32. blogList: res1.data,
  33. bolgTotal: res1.total * 1,
  34. friendList: res2.data
  35. }
  36. }
  37. }