Nuxtjs Axios onRequest() 未针对 asnycData 请求执行

Posted

技术标签:

【中文标题】Nuxtjs Axios onRequest() 未针对 asnycData 请求执行【英文标题】:Nuxtjs Axios onRequest() not executed for asnycData request 【发布时间】:2020-05-05 12:12:20 【问题描述】:

我已经配置了 axios 插件 onRequest helper 以在 API 请求上设置 Authorization 标头,如下所示

1. export default function( $axios, redirect, app, store ) 
2. $axios.onRequest(config => 
3.   var requestURL = config.url;
4.   console.log("Making request to " + requestURL);
5.    const token = store.state.user.account.token;
6.    if (token) 
7.      config.headers.common["Authorization"] = `Bearer $token`;
8.      console.log("Added authorization header");
9.    
10. );

store 中为actions 调用此onRequest 助手。但是对于页面组件中的asyncData,调用一直到上面的第2行,但从未进入onRequest函数。

import axios from "axios";

asyncData( params ) 
console.log("params: " + params);
return axios
  .get(`http://localhost:8080/user/id/$params.id`)
  .then(res => 
    return  userData: res.data ;
  )
  .catch(e => 
    error( statusCode: 404, message: "User not found" );
  );

据我了解,所有 Axios 请求都应通过 onRequest 辅助函数。我在这里错过了什么吗?如何解决这个问题?

【问题讨论】:

我仍在学习如何正确使用 nuxt、axios 和 auth 模块。你把你在这里写的第一个代码块放在哪里?它是作为中间件,还是作为 axios 的扩展添加的插件? 【参考方案1】:

当您import axios from 'axios' 时,您没有使用您最初指定的 axios 实例的配置。相反,您使用的是全新的 axios 实例。

正确的方法是利用Nuxt context 中的$axios 实例。

asyncData(context) 
   await context.$axios...

【讨论】:

【参考方案2】:

您也可以直接使用$axios 实例。一个例子是:

asyncData($axios) 
   await $axios...

【讨论】:

以上是关于Nuxtjs Axios onRequest() 未针对 asnycData 请求执行的主要内容,如果未能解决你的问题,请参考以下文章

nuxtJs中直接使用自带的@nuxtjs/axios

nuxtjs 环境中添加全局axios

NuxtJS $axios 通过请求发送 Cookie

nuxtjs/axios 4.4.0版本的初始化方法是啥? (nuxt.js)

如何在 NuxtJS 中设置全局 $axios 标头

VueJS/NuxtJs中如何动态调用axios方法