如何从 Prismic API 在 Sapper 应用程序中预加载数据
How to preload data in Sapper app from Prismic API
在我的 Sapper 应用程序中,我想使用他们的 SDK ('prismic-javascript)
从 Prismic API 预加载
我按照文档预加载内容。然而,文档仅通过 this.fetch 函数提供预加载。我想使用 Prismic SDK 连接到我的 Prismic 存储库。但它根本不给我任何数据。
我还尝试了使用 JSONplaceholder 的 this.fetch 方法。那很好用。即使需要 Prismic-SDK,"old way" 也不起作用:
var Prismic = require("prismic-javascript")
我的代码是这样的:
<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>
此代码应使用 API 数据填充数据变量。但事实并非如此。这里有没有人可以帮助我?谢谢!
我查看了 prismic 文档,结果发现 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();
}
}
如果您不需要来自 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>
在我的 Sapper 应用程序中,我想使用他们的 SDK ('prismic-javascript)
从 Prismic API 预加载我按照文档预加载内容。然而,文档仅通过 this.fetch 函数提供预加载。我想使用 Prismic SDK 连接到我的 Prismic 存储库。但它根本不给我任何数据。
我还尝试了使用 JSONplaceholder 的 this.fetch 方法。那很好用。即使需要 Prismic-SDK,"old way" 也不起作用:
var Prismic = require("prismic-javascript")
我的代码是这样的:
<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>
此代码应使用 API 数据填充数据变量。但事实并非如此。这里有没有人可以帮助我?谢谢!
我查看了 prismic 文档,结果发现 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();
}
}
如果您不需要来自 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>