从 Svelte Kit 中的加载函数调用 prisma 客户端

Posted

技术标签:

【中文标题】从 Svelte Kit 中的加载函数调用 prisma 客户端【英文标题】:Doing call to prisma client from load function in Svelte Kit 【发布时间】:2021-11-23 02:39:51 【问题描述】:

我正在使用 Prisma.io 编写数据库,并希望从 typescript 函数调用 Prisma 客户端。

我尝试使用 Svelte 工具包的加载功能,并将调用写入隐藏的 _api.ts 文件,但没有成功。 Prisma 客户端抱怨无法从浏览器运行。我知道它应该以某种方式仅在服务器上运行。将 Prisma 与 Svelte 套件一起使用并在服务器上运行调用的正确方法是什么?

【问题讨论】:

【参考方案1】:

Svelte 中的“加载”功能可能在服务器或浏览器中运行,所以这可能是错误的原因。

我建议你把 _api.ts 变成一个可调用的端点。然后,您需要确保 api.ts 导出一个名为“get”(或其他方法)的函数。更多信息在这里:https://kit.svelte.dev/docs#routing-endpoints

完成此操作后,您应该能够直接浏览到 api 路由,并且应该在 api.ts 文件中看到“get”函数的结果。

然后,在您的“加载”函数中,您可以使用“获取”方法访问该路由并获取数据。在 Svelte 中,fetch 方法适用于服务器和浏览器。 https://kit.svelte.dev/docs#loading-input-fetch

更新:

要执行“POST”端点,您需要在端点文件中导出一个名为“post”的函数。我建议您 console.log 请求以查看调用端点时收到的数据:

export async function get(request) 
  console.log(request);
  return 
    body:  success: true ,
  ;


【讨论】:

好的,所以我必须将 django 中的当前 REST api 基本转换为 Svelte trhough 端点中的 Prisma API。我让 get API 端点工作,但 post api 端点还没有。如何在 post 函数中重新调用路由参数? 您需要在端点文件中导出一个名为“post”和/或“get”的函数。如果你 console.log 输出请求以查看调用函数时收到的内容,这是最简单的。 谢谢。这有帮助,我可以编写一个 POST 函数。但是,当用 get api 端点内的 prisma 调用替换其余 fetch 调用时,await 块中断,我的代码似乎卡在 await 上。我不明白棱镜是如何改变这一点的。 get pi 端点的返回类型是否应该具有特定的形状? 你用 try / catch 包裹了你的 await 吗?文档显示了返回对象的结构。您可以在文档中搜索:' status, headers, body '

以上是关于从 Svelte Kit 中的加载函数调用 prisma 客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Svelte 组件中导出更改组件中的值的函数?

@urql/svelte,“在组件初始化之外调用的函数”如果不在 onMount 中

从 HTML 字符串渲染 Svelte 组件

Svelte - 从组件脚本转发事件

Svelte - 路由,当我尝试输入任何网址时,我只会收到“未找到网页”错误

如何使用 Promise Kit 调用递归函数?