javascript - Sapper 中的 Axios 请求两次?

标签 javascript jwt axios sapper svelte-3

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

当我在后端记录请求 Urls 时,我开始知道 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>

最佳答案

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

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

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

关于javascript - Sapper 中的 Axios 请求两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58620662/

相关文章:

javascript - 扩展 Google map 范围,使 div 叠加层不覆盖任何标记

javascript - 为什么这个 JavaScript 语句中的变量 "a"不是变量表达式?

asp.net-core - options.AutomaticAuthenticate 和 UseJwtBearerAuthentication 的用途

javascript - react GitHub repo API

node.js - 跨源 HTTP 请求源自服务器端 NodeJS/Axios/JSDOM

javascript - 使用 formData axios 发布数据数组

javascript - 如何从嵌套函数中检索值

php - Laravel/JWT token token 何时被列入黑名单?

java - 是否可以在没有刷新 token 的情况下检查 JWT 有效性?

javascript - 在 JavaScript 中链接函数和不链接函数有什么区别?