maticzav / graphql-middleware

Split up your GraphQL resolvers in middleware functions

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

When used as specified in the middleware documentation, the function is executed for every type, for every field of that type, and for all subfields in the request.

wmwart opened this issue · comments

I installed the package as directed in readme. And Launched the first example https://github.com/maticzav/graphql-middleware#how-does-it-work.

I expected to see something similar during execution, which is indicated in the diagram. 2 messages before the resolver, 2 after.
However, my entire console was filled with messages for the request itself, for return type fields, for all subfields of that type.

Is this the right job?

server:

const { ApolloServer, makeExecutableSchema } = require('apollo-server');
const { applyMiddleware } = require('graphql-middleware');
const { typeDefs, resolvers } = require('./modules');
const schemaDirectives = require('./directives');

const executableSchema = makeExecutableSchema({
  typeDefs,
  resolvers,
  schemaDirectives,
})

const logInput = async (resolve, root, args, context, info) => {
  console.log(`1. logInput: ${JSON.stringify(args)}`)
  const result = await resolve(root, args, context, info)
  console.log(`5. logInput`)
  return result
}

const logResult = async (resolve, root, args, context, info) => {
  console.log(`2. logResult`)
  const result = await resolve(root, args, context, info)
  console.log(`4. logResult: ${JSON.stringify(result)}`)
  return result
}

const schema = applyMiddleware(executableSchema, logInput, logResult);

const server = new ApolloServer({
  schema,
  context: req => {
    return {
      ...req,
    }
  }
});

server.listen({
  port: APP_PORT,
}).then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

query:

query getOneDashboard($where: DashboardWhereUniqueInput!) {
  data: Dashboard(where: $where) {
    item {
      ...DashboardFragment
      __typename
    }
    __typename
  }
}

fragment DashboardFragment on Dashboard {
  id
  name
  description
  createdAt
  createdBy {
    ...EmbeddedUserFragment
    __typename
  }
  updatedAt
  deleted
  widgets {
    id
    widget {
      ...EmbeddedWidgetFragment
      __typename
    }
    meta
    __typename
  }
  __typename
}

fragment EmbeddedUserFragment on User {
  id
  name
  description
  __typename
}

fragment EmbeddedWidgetFragment on Widget {
  id
  name
  description
  url
  meta
  __typename
}

server console:

1. logInput: {"where":{"id":"ckko0k5su0000ckkjwjfgh63u"}}
 src/index.js
2. logResult
 src/index.js
4. logResult: {"item":{"id":"ckko0k5su0000ckkjwjfgh63u","name":"bnvnvbvbn","description":null,"createdAt":"2021-02-02T13:04:17.502Z","createdBy":{"id":"ckk28m3si00004kkjppinmbde","name":"Super Admin","description":"d456fg"},"updatedAt":"2021-02-05T06:01:49.029Z","deleted":true,"widgets":[]}}
 src/index.js
5. logInput
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
4. logResult: {"id":"ckko0k5su0000ckkjwjfgh63u","name":"bnvnvbvbn","description":null,"createdAt":"2021-02-02T13:04:17.502Z","createdBy":{"id":"ckk28m3si00004kkjppinmbde","name":"Super Admin","description":"d456fg"},"updatedAt":"2021-02-05T06:01:49.029Z","deleted":true,"widgets":[]}
 src/index.js
5. logInput
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
4. logResult: "ckko0k5su0000ckkjwjfgh63u"
 src/index.js
4. logResult: "bnvnvbvbn"
 src/index.js
4. logResult: null
 src/index.js
4. logResult: "2021-02-02T13:04:17.502Z"
 src/index.js
4. logResult: {"id":"ckk28m3si00004kkjppinmbde","name":"Super Admin","description":"d456fg"}
 src/index.js
4. logResult: "2021-02-05T06:01:49.029Z"
 src/index.js
4. logResult: true
 src/index.js
4. logResult: []
 src/index.js
5. logInput
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
1. logInput: {}
 src/index.js
2. logResult
 src/index.js
4. logResult: "ckk28m3si00004kkjppinmbde"
 src/index.js
4. logResult: "Super Admin"
 src/index.js
4. logResult: "d456fg"
 src/index.js
5. logInput
 src/index.js