SvelteKit组件无法获取page.server.ts存入Store的Token值
问题:SvelteKit应用中组件无法获取服务端存入Store的Token值
开发基于SvelteKit的Web应用时,遇到组件ModalFlight.svelte无法获取page.server.ts从第三方API获取的Token值的问题。需要在多组件间共享该Token,不想使用Cookie,目前page.server.ts已成功获取Token并存入自定义Store,但点击组件按钮触发alert时无法显示该值。
ModalFlight.svelte代码
<script lang="ts"> import my_store from '$lib/Store'; import { get } from 'svelte/store'; import { page } from '$app/stores'; $: tokenString = ''; my_store.subscribe((data) => { tokenString = get(my_store).token; console.log('subscribed value' + tokenString); }); function fetchFlights() { alert(get(my_store).token); } </script> <!-- svelte-ignore a11y-click-events-have-key-events a11y-no-noninteractive-element-interactions --> <!-- svelte-ignore a11y-no-static-element-interactions --> <div on:click|stopPropagation class="flightbar"> <button class="btn" on:click={() => fetchFlights()}>Find Flights</button> </div>
page.server.ts代码
import { amedeus_client_id } from '$env/static/private'; import { amedeus_secret } from '$env/static/private'; import $my_store from '$lib/Store' import { get } from 'svelte/store'; const myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); const urlencoded = new URLSearchParams(); urlencoded.append("grant_type", "client_credentials"); urlencoded.append("client_id", amedeus_client_id); urlencoded.append("client_secret", amedeus_secret); function getToken():any{ let data; const requestOptions = { method: "POST", headers: myHeaders, body: urlencoded, redirect: "follow" }; fetch("https://test.api.amadeus.com/v1/security/oauth2/token", requestOptions) .then((response) => response.text()) .then((result) => { const tokenDetails = JSON.parse(result); data = tokenDetails; $my_store.set( {'token': tokenDetails.access_token}); $my_store.update((data) => { return {'token': tokenDetails.access_token} }); console.log('hello'+JSON.stringify(get($my_store))); // console.log(JSON.stringify(token)); // token.set(tokenDetails.access_token); // console.log("printing result : "+token) }) .catch((error) => console.error(error)); return data; } export async function load() { return { posts: getToken() } }
Store代码
import { writable } from 'svelte/store'; const my_store = writable({ 'token': 'default value' }); my_store.set({ 'token': '' }); export default my_store;
项目结构

内容的提问来源于stack exchange,提问作者Gagan Singh
相关产品推荐
相关产品推荐

