我使用axios
在preload
内外发送请求。但我不明白,出于某种原因,我的后端抱怨必须提供JWT。我将相同的后端与另一个前端(Svelte仅与Axios一起使用(使用,没有任何抱怨。但在Sapper,当我向axios申请凭据时(是的(。我得到了jwt必须提供。
当我在后端记录请求URL时,我知道Sapper向后端发送了两次请求URL,一次有凭据,另一次没有凭据,这导致必须提供JWT。我很确定有凭据的请求来自axios,但没有凭据的请求则来自magic。这种魔法发生在哪里?为什么?
<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在将代码发送到第二次运行的浏览器之前也在运行您的代码(。
你能在axios请求之前添加一些if语句来检查if (process.browser) { [...] }
(或window
或其他浏览器专有变量的存在(吗?
服务器端代码显然无法从用户浏览器访问cookie或localStorage,因此JWT将为空。