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
变量在您的架构中不存在,并且您在请求中添加了与您的 User
和 Post
架构不匹配的无关 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' },
)
我在我的 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
变量在您的架构中不存在,并且您在请求中添加了与您的 User
和 Post
架构不匹配的无关 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' },
)