Error : expected value of type 'String!' but value is undefined

Error : expected value of type 'String!' but value is undefined

我在我的 stelve 工具包应用程序中使用了这段代码。 我想发送电子邮件以从 graphql 查询数据。 我尝试使用此代码但出现错误。

<script lang="js">
    import { gql, operationStore, query, setClient } from '@urql/svelte';
    import client from '../client';
    setClient(client);

    import { userSession } from '../store.js';

    let user;
    userSession.subscribe((val) => {
        user = val;
    });
    console.log("user = ");
    console.log(user.id);
    console.log(user.email);

    const postsQuery = gql`
        query GetAllPosts($size: Int!, $cursor: String, $email: String!) {
        GetPostByUsersEmail(_size: $size, _cursor: $cursor, email: $email) {
            data {
                email
                username
                posts {
                    data {
                    title
                    }
                }
            }
        }
        }
    `

    const allPosts = operationStore(
        postsQuery,
        { size: 100 },
        { requestPolicy: 'network-only' },
        { email: 'test@email.com' }
    )
    query(allPosts);

    console.log(allPosts)

</script>

有架构

type User @auth(primary: "email") {
  username: String!
  email: String!
  posts: [Post!] @relation
}

type Post @protected(membership: "User", rule: ["read", "write", "create"]) {
  title: String!
  content: String!
  author: User!
}

type Query {
  listPosts: [Post]
  users(username: String!): [User]
  posts(title: String!): [Post] 
  GetPostByUsersEmail(email: String!): [User]
}

我觉得一切都很好但是allPosts的数据没有追加 并得到 console.log(allPosts)

的错误表单数据
GraphQLError: Variable '$email' expected value of type 'String!' but value is undefined.

有人能帮忙吗?

您的代码中有几处错误。

关于您的错误,您对 operationStore 的调用格式错误。第一个参数应该是你的 gql-formatted 查询(它是),第二个参数需要一个包含 all 你的变量的对象,第三个参数需要一个选项对象(requestPolicy,等等)。然而,您试图在 两个单独的参数 (第二个和第四个)中传递变量。所以你对 operationStore 的调用应该是:

const allPosts = operationStore(
    postsQuery,
    { size: 100, email: 'test@email.com' },
    { requestPolicy: 'network-only' },
)

这将修复您最初的错误。然而...

此外,您的 client-side 查询与您的架构定义不匹配。 _size_cursor 变量在您的架构中不存在,并且您在请求中添加了与您的 UserPost 架构不匹配的无关 data 键类型。您的查询应该是:

const postsQuery = gql`
    query GetAllPosts($email: String!) {
        GetPostByUsersEmail(email: $email) {
            email
            username
            posts {
                title
            }
        }
    }
`

因此,您最终的修改后的 operationStore 调用应该是:

const allPosts = operationStore(
    postsQuery,
    { email: 'test@email.com' },
    { requestPolicy: 'network-only' },
)