如何从Prismic API在Sapper应用程序中预加载数据

时间:2019-08-08 17:38:45

标签: svelte sapper

在我的Sapper应用中,我想使用其SDK('prismic-javascript)从Prismic API进行预加载

我按照文档进行了预加载。但是文档仅通过this.fetch函数提供预加载。我想使用Prismic SDK连接到我的Prismic存储库。但这根本不给我任何数据。

我还尝试了使用JSONplaceholder的this.fetch方法。那很好。甚至要求“老方法”使用Prismic-SDK也不起作用:

<script context="module">
  import Prismic from "prismic-javascript";
  const apiEndpoint = "https://my-repository.cdn.prismic.io/api/v2";

  export async function preload(page, session) {
    const api = await Prismic.getApi(apiEndpoint, { req });
    const data = await api.getSingle("portfolio");
    return { data };
  }
</script>

这就是我的代码:

string myString = "<at>onePossibleName</at> some question here regarding <at>disPossibleName</at>"

int sFrom = myString.IndexOf("<at>") + "<at>".Length;
int sTo = myString.IndexOf("</at>");

string myEditedString = myString.SubString(sFrom, sFrom - sTo);
Console.WriteLine(myEditedString);
//output now is: some question here regarding <at>disPossibleName</at>

此代码应使用API​​数据填充数据变量。但事实并非如此。有没有人可以帮助我呢?谢谢!

2 个答案:

答案 0 :(得分:1)

我检查了棱柱形文档,结果发现getApi方法要求您在第二个参数中提供req

Req是nodejs服务器调用中的request参数。您无法通过preload方法访问它。

您需要做的是创建一个server route,从中您可以使用Prismic API。

<script context="module">
  export async function preload(page, session) {
    const data = await this.fetch('/prismic/portfolio');
    return { data };
  }
</script>

使用prismic/[slug].js服务器路由

import Prismic from "prismic-javascript";
const apiEndpoint = "https://my-repository.cdn.prismic.io/api/v2";

export async function get(req, res, next) {
    const { slug } = req.params;

    const api = await Prismic.getApi(apiEndpoint, { req });
    const data = await api.getSingle(slug);

    if (article !== null) {
        res.setHeader('Content-Type', 'application/json');
        res.end(JSON.stringify(data));
    } else {
        next();
    }
}

答案 1 :(得分:0)

如果您不需要Prismic的req对象,则可以使用此方法:

  import Prismic from "prismic-javascript";
  const apiEndpoint = "https://my-repository.cdn.prismic.io/api/v2";

  export async function preload({ params, query }) {
    const api = await Prismic.getApi(apiEndpoint);
    const data = await api.getSingle("portfolio");

    return { data };
  }
</script>