Jump to content
Algorithm

Erro de Syntax [ GraphQL + NodeJS ]

Recommended Posts

Olá a todos

 

Eu estou codificando um exemplo de uso do GraphQL com Nodejs, mas eu estou recebendo um erro de syntax relacionado a [ : ] [ Dois Pontos ], mas eu comparei meu codigo, com o da documentação oficial e esta tudo certo. Será que alguem, conseguiria achar o erro ?

 

OBS: Esta incluso neste post [ Exemplo Documentação, Meu Exemplo, Mensagem de Erro, Código Completo ]

 

Exemplo Documentação

module.exports = /* GraphQL */ `
  type Client {
    id: ID!
    name: String
    age: Int
    products: [Product]
  }

  type Query {
    clients: [Client]
    client(id: ID!): Client
  }

  type Mutation {
    addClient(name: String!, age: Int!): Client
  }
`

 

Meu Exemplo

const typeDefs = `
    type Pessoa {
        _id: ID
        _codigo: Float
        _nome: String
        _idade: Int
        _email: String
    }

    input inputPessoa {
        _codigo: Float
        _nome: String
        _idade: Int
        _email: String       
    }

    type Query {
        resposta: String
        saudacao(nome: String!): String
        findPessoaOne(codigo: Float): Pessoa
        findPessoa(input: inputPessoas): [Pessoa]
    }

    type Mutation {
        insertPessoa(input: inputPessoa): Pessoa
        updatePessoa(codigo: Float, input: inputPessoa) Pessoa
        deletePessoa(codigo: Float) [Pessoa]
    }
`;

 

Mensagem de Erro

C:\Users\Core\node\node_modules\graphql\language\parser.js:1413   

    throw (0, _syntaxError.syntaxError)(
    ^

GraphQLError: Syntax Error: Expected ":", found Name "Pessoa".
    at syntaxError (C:\Users\Core\node\node_modules\graphql\error\syntaxError.js:15:10)
    at Parser.expectToken (C:\Users\Core\node\node_modules\graphql\language\parser.js:1413:40)
    at Parser.parseFieldDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:847:10)
    at Parser.optionalMany (C:\Users\Core\node\node_modules\graphql\language\parser.js:1510:28)
    at Parser.parseFieldsDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:831:17)
    at Parser.parseObjectTypeDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:803:25)
    at Parser.parseDefinition (C:\Users\Core\node\node_modules\node_modules\graphql\language\phql\language\parser.js:171:23)
    at Parser.many (C:\Users\Core\node\node_modules\graphql\language\parser.js:1529:26) 
    at Parser.parseDocument (C:\Users\Core\node\node_modules\graphql\language\parser.js:121:25)
    at parse (C:\Users\Core\node\node_modules\graphql\language\parser.js:32:17) {
  path: undefined,
  locations: [ { line: 26, column: 57 } ],
  extensions: [Object: null prototype] {}
}

 

Codigo Completo

// Requires
const express = require('express');
const GraphQL_HTTP = require('express-graphql');
const { mergeSchemas } = require('@graphql-tools/schema');

// Run
// const connect = MongoClient.connect('');
const app = express();

const getCode = () => { return 10 };

// GraphQL Definitions || Query and Mutation
const typeDefs = `
    type Pessoa {
        _id: ID
        _codigo: Float
        _nome: String
        _idade: Int
        _email: String
    }

    input inputPessoa {
        _codigo: Float
        _nome: String
        _idade: Int
        _email: String       
    }

    type Query {
        resposta: String
        saudacao(nome: String!): String
        findPessoaOne(codigo: Float): Pessoa
        findPessoa(input: inputPessoas): [Pessoa]
    }

    type Mutation {
        insertPessoa(input: inputPessoa): Pessoa
        updatePessoa(codigo: Float, input: inputPessoa) Pessoa
        deletePessoa(codigo: Float) [Pessoa]
    }
`;

// Functions
const resolvers = {
    Query: {
        resposta: function() {
            return `GraphQL Conectado com Sucesso...`;
        },
        saudacao: function(_, args) {
            return `Olá ${args.nome}! Seja Muito Bem Vindo(a) a GraphQL!!!! `
        },
        findPessoaOne: function(_, args) {
            return db.collection('GraphQL-Pessoa').findOne({codigo: args.codigo})
                                            .then((result) => {
                                                                 return result;
                                                              });
        },
        findPessoa: function(_, args) {
            return db.collection(`GraphQL-Pessoa`).find(args.input).toArray()
                                                                .then((result) => {
                                                                    return result;
                                                                });
        },
    Mutation: {
        insertPessoa: function(_, args) {
            args.input.codigo = getCode();
            return db.collection(`GraphQL-Pessoa`).insertOne(args.input)
                                            .then((result) => {
                                                return result.ops[0];
                                            });
        },
        updatePessoa: function(_, args) {
            return db.collection('GraphQL-Pessoa').updateOne({codigo: args.codigo}, {$set: args.input})
                                            .then((result) => {
                                                if(result.result.n > 0) return `Registro Alterado com Sucesso!`;
                                                else return `Ocorreu um erro ao alterar o registro`;
                                            });
        },
        deletePessoa: function(_, args) {
            return db.collection(`GraphQL-Pessoa`).deleteOne({codigo: args.codigo})
                                            .then((result) => {
                                                if(result.result.n > 0) return `Registro Deletado com Sucesso!`;
                                                else return `Ocorreu um erro ao deletar o registro`;
                                            });
        }
    }
    }
};

const schema = mergeSchemas({
    typeDefs: typeDefs,
    resolvers: resolvers
})

// Listen
app.listen(3005, () => {
    console.log(`Servidor Rodando na Porta 3005`);
})

 

 

Obrigado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By belann
      Olá!
       
      Estou tentando iniciar uma Api de rotas no nodejs é da o seguinte erro:
      C:\Users\arifu\ntask-api\node_modules\consign\lib\consign.js:121
      /**
            ^
      Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\l\ntask-api\models\tasks.js from C:\Users\arifu\ntask-api\node_modules\consign\lib\consign.js not supported.
      tasks.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules.
      Instead either rename tasks.js to end in .cjs, change the requiring code to use dynamic import() which is available in all CommonJS modules, or change "type": "module" to "type": "commonjs" in C:\Users\l\ntask-api\package.json to treat all .js files as CommonJS (using .mjs for all ES modules instead).
          at Object.newLoader [as .js] (C:\Users\l\ntask-api\node_modules\pirates\lib\index.js:121:7)
          at Consign.into (C:\Users\l\ntask-api\node_modules\consign\lib\consign.js:231:15)
          at file:///C:/Users/l/ntask-api/index.js:11:3 {
        code: 'ERR_REQUIRE_ESM'
       
      Ja troquei type: module para type: commonjs e dá outros erros como na importação do express.
      package.json
       
      {   "name": "ntask-api",   "version": "1.0.0",   "description": "API de gestão de tarefas",   "main": "index.js",   "type": "module",   "scripts": {     "start": "babel-node index.js"   },   "author": "l",   "dependencies": {     "@babel/cli": "^7.0.0",     "@babel/core": "^7.0.0",     "@babel/preset-env": "^7.0.0",     "consign": "^0.1.2",     "express": "^4.18.2"   },   "devDependencies": {     "@babel/core": "^7.0.0",     "@babel/node": "^7.0.0",     "@babel/preset-env": "^7.23.3"   } }  
      index.js
      import express from 'express'; import consign from 'consign';   const app = express();   consign()  .include("models")  .then("libs/middlewares.js")  .then("routes")  .then("libs/boot.js")  .into(app);
    • By belann
      Olá! 
      Não consigo iniciar um programa usando nodejs, babel e express
      npm start
      > nt-api@1.0.0 start
      > babel-node index.js
      C:\Users\ar\nt-api\node_modules\babel-core\lib\transformation\file\options\option-manager.js:328
              throw e;
              ^
      Error: Couldn't find preset "@babel/env" relative to directory "C:\\Users\\ar\\nt-api"
          at C:\Users\ar\nt-api\node_modules\babel-core\lib\transformation\file\options\option-manager.js:293:19
          at Array.map (<anonymous>)
          at OptionManager.resolvePresets (C:\Users\ar\nt-api\node_modules\babel-core\lib\transformation\file\options\option-manager.js:275:20)
          at OptionManager.mergePresets (C:\Users\ar\nt-api\node_modules\babel-core\lib\transformation\file\options\option-manager.js:264:10)
          at OptionManager.mergeOptions (C:\Users\ar\nt-api\node_modules\babel-core\lib\transformation\file\options\option-manager.js:249:14)
          at OptionManager.init (C:\Users\ar\nt-api\node_modules\babel-core\lib\transformation\file\options\option-manager.js:368:12)
          at compile (C:\Users\ar\nt-api\node_modules\babel-register\lib\node.js:103:45)
          at loader (C:\Users\ar\nt-api\node_modules\babel-register\lib\node.js:144:14)
          at Object.require.extensions.<computed> [as .js] (C:\Users\ar\nt-api\node_modules\babel-register\lib\node.js:154:7)
          at Module.load (node:internal/modules/cjs/loader:1207:32)
      Node.js v21.2.0
    • By Wilherme
      Boa tarde galera, preciso de uma ajuda,
       
      Tenho um gráfico no meu Power Bi porem apresenta o erro abaixo:
       

       
      já habilitei as funções porém ainda com erro.
       
       
      Obrigado.
    • By 4Unknow
      Bom dia comunidade Imasters.

      Venho aqui tratar de um problema dúvida que estou tendo com um layout que estou tentando usar o formulário php dele.
      Quando clico em enviar ele me enviar para um arquivo .php  (assets/vendor/simple-forms/sendmail.php)

      Ele não envia o e-mail, acredito que deveria aparecer uma mensagem que o contato foi enviado corretamente.
      Vou deixar os arquivos aqui em anexo quem puder me ajudar nessa, ficaria muito grato.
       
      Link Website (wetransfer.com)
    • By cmoreira1300
      Meu programa não consegue identificar o dotenv na middleware
      Eu estava fazendo um CRUD simples, implementei o dotenv no meu programa, está funcionando quando faço a conexão com o banco de dados e a inserção e uma função normal,  mais quando vou fazer isso dentro de uma middleware ele não chama meu dotenv, só funciona quando tiro o process.env e ponho as informações direto na função de conexão.
      require( 'dotenv' ).config( { path: '../../.env' } ) const mysql = require( 'mysql2' ) // DESSA FORMA NÃO FUNCIONA const connection_pool = mysql.createPool( { host: process.env.DB_HOST, user: process.env.DB_USER, database: process.env.DB_DATABASE, password: process.env.DB_PASS } ) // DESSA FORMA FUNCIONA // const connection_pool = mysql.createPool( { // host: 'localhost', // user: 'carlos', // database: 'simple_crud', // password: 'pass1241' // } ) module.exports = connection_pool.promise() INSERÇÃO NO BANCO DE DADOS
      const db_conn = require( '../db/connection' ) const createNewClient = ( name ) => { return db_conn.execute( `INSERT INTO client ( name ) values (?)`, [ name ] ) } module.exports = { createNewClient } FAZENDO A INSERÇÃO NO MIDDLEWARE
      const data = require( '../data/client' ) const createClient = ( req, res, next ) => { const client = req.body.name data.createNewClient( client ) .then( () => { res.status( 200 ).json( { 'status': 'sucess', 'client': client } ) } ) .catch( ( err ) => { res.status( 404 ).json( { status: 'error', error: err } ) } ) .finally( () => { next() } ) } module.exports = { createClient } { "status": "error", "error": { "message": "Access denied for user ''@'localhost' (using password: YES)", "code": "ER_ACCESS_DENIED_ERROR", "errno": 1045, "sqlState": "28000", "sqlMessage": "Access denied for user ''@'localhost' (using password: YES)" } }  Esse é o erro que obtenho quando uso o dotenv, lenbrando que as informações de login estão todas certas, e que em outra função que não seja um middleware funciona.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.