我的自定义 Netlify 无服务器函数不会从 Prismic API 获取数据

Posted

技术标签:

【中文标题】我的自定义 Netlify 无服务器函数不会从 Prismic API 获取数据【英文标题】:My custom Netlify serverless function won't fetch data from 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' 【参考方案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),
      ;
    );
;

【讨论】:

请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。

以上是关于我的自定义 Netlify 无服务器函数不会从 Prismic API 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

部署到 Netlify 后无法从后端获取数据

上帝不会注册正在运行的自定义服务

获取错误消息 n 不是函数

在建立安全 TLS 连接之前,Netlify 和 Faunadb 客户端网络套接字断开连接

从以往子类化跟踪MouseLeave深入讨论VB6的自定义Hook类

使用Netlify lambda函数从GatsbyJS网站发送电子邮件