使用 pt::text 时 sanity-algolia 出错

sanity-algolia get error when using pt::text

我正在尝试使用 sanity-algolia 库(参考 https://www.sanity.io/plugins/sanity-algolia)将 algolia 搜索与 sanity CMS 集成

但是当我尝试使用 pt::text 函数从 Portable Text 富文本内容中获取纯文本时。 我得到 expected '}' following object body ,但我真的不知道我在哪里缺少括号。

(另一个注意事项:由于我通过使用 sanity start 托管理智,我正在使用 nextjs(我的前端)来 运行 函数而不是使用 nextJS 中的 /api 路由)所以 sanity 有一个 webhook 到这条路线。

错误详情:

  details: {
    description: "expected '}' following object body",
    end: 174,
    query: '* [(_id in $created || _id in $updated) && _type in $types] {\n' +
      '  _id,\n' +
      '  _type,\n' +
      '  _rev,\n' +
      '  _type == "post" => {\n' +
      '        title,\n' +
      '        "path": slug.current,\n' +
      '        "body": pt::text(body)\n' +
      '      }\n' +
      '}',
    start: 107,
    type: 'queryParseError'
  }

这是无服务器函数 im 运行ning:

export default async function handler(req, res) {
  if (req.headers["content-type"] !== "application/json") {
    res.status(400);
    res.json({ message: "Bad request" });
    return;
  }

  const algoliaIndex = algolia.initIndex("dev_kim_miles");

  const sanityAlgolia = indexer(
    {
      post: {
        index: algoliaIndex,
        projection: `{
        title,
        "path": slug.current,
        "body": pt::text(body)
      }`,
      },
    },
    (document) => {
      console.log(document);
      return document;
    },
    (document) => {
      if (document.hasOwnProperty("isHidden")) {
        return !document.isHidden;
      }
      return true;
    }
  );
  return sanityAlgolia
    .webhookSync(sanityClient, req.body)
    .then(() => res.status(200).send("ok"));
}

和我的 post 理智模式:

export default {
  name: 'post',
  title: 'Post',
  type: 'document',
  fields: [
    {
      name: 'title',
      title: 'Title',
      type: 'string',
    },
    {
      name: 'slug',
      title: 'Slug',
      type: 'slug',
      options: {
        source: 'title',
        maxLength: 96,
      },
    },
    {
      name: 'author',
      title: 'Author',
      type: 'reference',
      to: {type: 'author'},
    },
    {
      name: 'mainImage',
      title: 'Main image',
      type: 'image',
      options: {
        hotspot: true,
      },
    },
    {
      name: 'categories',
      title: 'Categories',
      type: 'array',
      of: [{type: 'reference', to: {type: 'category'}}],
    },
    {
      name: 'publishedAt',
      title: 'Published at',
      type: 'datetime',
    },
    {
      name: 'body',
      title: 'Body',
      type: 'blockContent',
    },
    {
      name: 'extra',
      title: 'extra',
      type: 'blockContent',
    },
  ],

  preview: {
    select: {
      title: 'title',
      author: 'author.name',
      media: 'mainImage',
    },
    prepare(selection) {
      const {author} = selection
      return Object.assign({}, selection, {
        subtitle: author && `by ${author}`,
      })
    },
  },
}

sanity api v1 不适用于函数,我正在使用

const sanityClient = client({
  dataset: "production",
  useCdn: true,
  projectId: "project_id",
});

默认为 v1,但为了使用功能,我添加了一个 apiVersion 参数,使其在以后使用 api 版本:

const sanityClient = client({
  dataset: "production",
  useCdn: true,
  projectId: "9dz8b3g1",
  apiVersion: "2021-03-25",
});