Usé este código en mi aplicación Stelve Kit. Quiero enviar el correo electrónico para consultar datos de graphql. Intento usar este código pero me da error.
<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>con esquema
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] }Creo que todo está bien, pero los datos de allPosts no se adjuntan y obtuve este error de datos de console.log (allPosts)
GraphQLError: Variable '$email' expected value of type 'String!' but value is undefined.Alguien puede ayudar ?
Hay varias cosas mal en su código.
En lo que respecta a su error, su llamada a operationStore está mal formateada. El primer argumento debe ser su consulta con formato gql (que lo es), el segundo argumento espera un objeto que contenga todas sus variables y el tercer argumento espera un objeto de opciones ( requestPolicy , etc.). Sin embargo, intenta pasar sus variables en dos argumentos separados (2º y 4º). Entonces su llamada a operationStore debería ser:
const allPosts = operationStore( postsQuery, { size: 100, email: 'test@email.com' }, { requestPolicy: 'network-only' }, )Esto solucionaría su error inicial. Sin embargo...
Además, su consulta del lado del cliente no coincide con la definición de su esquema. Las variables _size y _cursor no existen en su esquema, y agregó claves de data extraños en su solicitud que no coinciden con sus tipos de esquema de User y Post . Tu consulta debe ser:
const postsQuery = gql` query GetAllPosts($email: String!) { GetPostByUsersEmail(email: $email) { email username posts { title } } } ` Y, por lo tanto, su llamada operationStore final y modificada debería ser:
const allPosts = operationStore( postsQuery, { email: 'test@email.com' }, { requestPolicy: 'network-only' }, )