Sapper中的Axios请求两次?

Posted

技术标签:

【中文标题】Sapper中的Axios请求两次?【英文标题】:Axios in Sapper requesting twice? 【发布时间】:2020-02-25 11:23:04 【问题描述】:

我正在使用axiospreload 内外发送请求。但我不明白由于某种原因我的后端抱怨必须提供 JWT。我正在使用与另一个前端相同的后端(仅与 Axios 一起使用 Svelte)并且没有抱怨。但是在 Sapper 中,当我使用带有凭据的 axios 请求时(是的)。我得到 jwt 必须提供。

当我在后端记录请求 URL 时,我知道 Sapper 向后端发送了两次请求 URL,一个带有凭据,另一个没有凭据,这导致必须提供 JWT。我很确定带有凭据的请求来自 axios,但没有凭据的请求来自魔术。这种魔法发生在哪里?为什么?

<script context="module">

  import axios from 'axios'

  const ax = axios.create(
    withCredentials: true,
    baseURL: 'http://localhost:7000',
    headers:  'Content-Type': 'application/json' ,
  )

  export async function preload (page) 
    const data = await ax.get(`/profile/$page.query.type`)
    let profiles = data
    return  profiles, page 
  

</script>

【问题讨论】:

【参考方案1】:

我遇到了类似的问题(预加载之外),我的问题是 Sappers 服务器端代码发布了第一个请求,而 Sappers 客户端代码发布了第二个请求(这是因为 Sapper如果我理解正确,则具有服务器端渲染,并且 Sapper 也在运行您的代码,然后将其发送到第二次运行的浏览器)。

您能否在 axios 请求之前添加一些 if 语句来检查 if (process.browser) [...] (或 window 或其他浏览器专有变量的存在)?

服务器端代码显然无法从用户浏览器访问 cookie 或 localStorage,因此 JWT 将为空。

【讨论】:

以上是关于Sapper中的Axios请求两次?的主要内容,如果未能解决你的问题,请参考以下文章

axios发送两次请求原因及解决方法

Axios 执行post发送两次请求的小坑

为啥axios请求接口会发起两次请求

解决vue axios跨域请求发送两次问题

为啥axios请求接口会发起两次请求

为啥axios请求接口会发起两次请求