typescript PayloadCMS GraphQL嵌套字段为空

bksxznpy  于 2022-11-30  发布在  TypeScript
关注(0)|答案(1)|浏览(128)

我尝试使用PayloadCMS GraphQL插件,但是无论我怎么尝试,type: "relationship"字段总是为空。我只是想建立一个非常简单的博客,没有什么花哨的。我在PayloadCMS Discord频道问过,但是没有得到回复。
以下是我的配置:

export default buildConfig({
  serverURL: "http://localhost:4000",
  admin: {
    user: Users.slug,
  },
  // cors: "*",
  collections: [Users, Posts, Media],
  typescript: {
    outputFile: path.resolve(__dirname, "payload-types.ts"),
  },
  graphQL: {
    schemaOutputFile: path.resolve(__dirname, "schema.graphql"),
  },
});

简单来说,我有3个模型:

// Posts.tsx

const Posts: CollectionConfig = {
  slug: "posts",
  // ...
  fields: [
    // ...
    {
      name: "title",
      type: "text",
    },
    {
      name: "author",
      type: "relationship",
      relationTo: "users",
    },
    {
      name: "backgroundImage",
      label: "backgroundImage",
      type: "upload",
      relationTo: "media",
      maxDepth: 2,
    },
    // ...
  ],
};

// Users.tsx

const Users: CollectionConfig = {
  slug: "users",
  auth: {
    depth: 2,
  },
  admin: {
    useAsTitle: "email",
  },
  fields: [
    // ...
    {
      name: "name",
      type: "text",
    },
    // ...
  ],
};

// Media.tsx

const Media: CollectionConfig = {
  slug: "media",
  fields: [
    {
      name: "alt",
      type: "text",
    },
  ],
  upload: {
    staticURL: "/media",
    staticDir: "media",
    imageSizes: [
      {
        name: "thumbnail",
        width: 400,
        height: 300,
        position: "centre",
      },
      {
        name: "card",
        width: 768,
        height: 1024,
        position: "centre",
      },
      {
        name: "tablet",
        width: 1024,
        // By specifying `null` or leaving a height undefined,
        // the image will be sized to a certain width,
        // but it will retain its original aspect ratio
        // and calculate a height automatically.
        height: null,
        position: "centre",
      },
    ],
    adminThumbnail: "thumbnail",
    mimeTypes: ["image/*"],
  },
};

我创建了一个运行良好的种子文件:当我登录到/admin门户时,我可以看到我所有的数据,包括上传,一切看起来都是手工完成的。2我测试了手工创建,它看起来是正确的(见下文)。

奇怪的是,当我请求嵌套的和相关的字段时,GraphQLPlayground工作正常(见下文)。

但当我尝试从前端应用程序查询它时,authorbackgroundImage字段为null,尽管查询完全相同:

{
  __typename: 'Post',
  id: '638522f471c0c4aaced74144',
  title: 'Necessitatibus distinctio suscipit iure eum architecto aspernatur temporibus.',
  backgroundImage: null,
  author: null
}

这也发生在Postman身上,这让我相信我需要发送一些东西(我试过auth令牌和cookie),但我错过了。我试过为{ Query: { Author: () => {} } }和其他很多文件添加自定义解析器,但GraphQL部门 * 真的 * 缺少文档,所以我只能盲目猜测。
在这方面的任何帮助都将非常感谢,否则我将不得不重新开始RESTful查询,这将挫败学习GraphQL和Payload的意义。
很乐意提供更多信息

mklgxw1f

mklgxw1f1#

答:这是因为我的Users集合限制了管理员的读取权限。

// access: {
  //   read: Collection.isAdminOrSelf, // blocks access to nested graphql
  // },
  access: {
    read: () => true, // allows access
  },

相关问题