【问题标题】:My custom Netlify serverless function won't fetch data from Prismic API我的自定义 Netlify 无服务器函数不会从 Prismic API 获取数据
【发布时间】:2021-10-30 03:26:22
【问题描述】:

我正在尝试为 Netlify 编写一个无服务器函数,该函数本质上是从 Prismic API(我正在使用的无头 CMS)获取 JSON。

我这样做的原因是最终提供一个 Snipcart,一个购物车,带有一个“产品 URL”,它可以用来抓取 JSON 并验证交易。信息在这里:https://docs.snipcart.com/v2/configuration/json-crawler

const Prismic = require("@prismicio/client");

exports.handler = async function () {
  Prismic.client("https://my-repository.cdn.prismic.io/api/v2", { req: req })
    .then(function (api) {
      return api.query(Prismic.Predicates.at("document.type", "product"));
    })
    .then(function (response) {
        console.log(response)
      const data = await response.json();

      return {
        statusCode: 200,
        headers : { 
            'Content-Type': 'application/json',
            'Accept': 'application/json'
           },
        body: JSON.stringify(data),
      };
    });
};

使用上面的代码,我从控制台收到两条错误消息:

GET http://localhost:8888/.netlify/functions/prismic 500(内部服务器错误)

Uncaught (in promise) SyntaxError: Unexpected token S in JSON at position 0

...我对这个世界很陌生,非常感谢任何帮助!

【问题讨论】:

  • api.query 看起来不会返回 json
  • 我在这里关注 Prismic 查询文档:prismic.io/docs/technologies/how-to-query-the-api-javascript 你认为它们看起来应该工作吗?...现在我已经删除了 json 辅助函数来测试我是否得到任何来自 API 的响应。什么都没有,只是一个 TypeError 'Prismic.client(...).then is not a function'

标签: javascript fetch serverless prismic.io


【解决方案1】:

好吧,经过一番挣扎和很多挠头后,我让它开始工作了。

所有内容都在 Prismic 文档中,但经过大量故障排除https://prismic.io/docs/technologies/how-to-query-the-api-javascript

希望这可以帮助另一个初学者:

const Prismic = require("@prismicio/client"); 

exports.handler = async function () {
    const client = Prismic.client("http://my-repository.cdn.prismic.io/api");
  return client
    .query(Prismic.Predicates.at("document.type", "product"))
    .then(function (response) {

      let data = response.results;

      let newItems = Object.values(data).map((item) => {
        return {
            name: item.data.product.name.value[0].text,
            id: item.uid,
            price: item.data.product.price.value,
            url: 'https://my-site.netlify.app/.netlify/functions/prismic',
        };
      });

      return {
        statusCode: 200,
        headers: {
          "Content-Type": "application/json",
          Accept: "application/json",
        },
        body: JSON.stringify(newItems),
      };
    });
};

【讨论】:

  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2020-06-14
  • 2021-08-04
  • 2021-07-30
  • 2014-12-03
  • 2013-07-27
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多