我已经用Svelte编写了一个应用程序接口端点,它应该有助于从基于Prisma.io对象关系管理的数据库中获取大量对象。
API端点位于routes/api/[slug].json.ts,包含一个get函数:
export async function get({ params }) {
const { slug } = params
const objects = await prisma[slug].findMany({})
objects.forEach(function (object, index: number) {
object.objectId = index
})
return objects
}我的视图功能位于一个名为Cardview.svelte的Svelte文件中。它包含以下代码:
<script lang="ts">
export let object_model: string;
let title = toTitleCase(object_model);
async function obtain_objects(object_model: string) {
const url = 'http://localhost:3000/api/' + object_model + '.json';
const objects = await fetch(url);
return objects;
}
let objects = obtain_objects('measurement');
</script>
{#await objects}
Reading from server... <Spinner size="sm" type="grow" />
{:then objects}
<Container>
{#each objects as v}
<div class="shadow mb-5 bg-white rounded">
<Varcard variable={v} />
</div>
{/each}
</Container>
{:catch error}
There was an error in loading the JSON {object_model}.
<div><span>{error.message}</span></div>
{/await}从其他文件导入的一些布局被省略。
这段代码的问题在于,{#await...语法从不对let objects = ..部分求值。这意味着,页面总是停留在加载阶段,而Javascript对象objects总是停留在promise中。我的代码中的问题出在哪里?
谢谢。
发布于 2021-10-04 17:17:18
get函数未正确返回。您需要在返回的“body”属性中返回数据:
return {
body: objects
}使用fetch还需要一个额外的步骤:
async function obtain_objects(object_model: string) {
const url = 'http://localhost:3000/api/' + object_model + '.json';
const objects = await fetch(url);
return objects.json();
}这里有fetch api的示例:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
https://stackoverflow.com/questions/69436487
复制相似问题