Coder Social home page Coder Social logo

Comments (4)

cellis avatar cellis commented on June 23, 2024 2

Upon closer inspection, i have figured this out. However the README should be updated as the request parameter is undefined, while the root parameter actually contains the request.

const schema = getSchema([User], { hooks: {
    singular: {
        pre: (next, root, args, request)=> {
            console.log(root.request.user);  // => { email: '[email protected]' }
            console.log(request);            // => undefined
            next();
        },
        post: (next, value)=> {
            //...
            next();
        }
    }
}});

Perhaps the shifted signature of [email protected] has something to do with it. Here's the signature at 0.6.2:

graphql(schema, requestString, rootValue, contextValue, variableValues, operationName) {

And here's what graffiti passes:

return graphql(schema, query, { request }, context, parsedVariables)...

at L41

from graffiti-mongoose.

katopz avatar katopz commented on June 23, 2024 1

@cellis for mutation is even more weird
doc

  mutation: {
    pre: (next, args, context) => next(),
    post: (next, value, args, context) => next()
  }

actually

  mutation: {
    pre: (next, args, context, what) => {
      console.log(what.rootValue.request.user);
      next();
    },
    post: (next, value, args, context) => {
      next();
    }
  }

And context is empty {}

from graffiti-mongoose.

katopz avatar katopz commented on June 23, 2024 1

@tothandras I'm not sure PR for read me is enough, something really wrong there
Here's workaround for me atm

const hooks = {
  viewer: {
    pre: (next, args, foo, context, options) => {
      console.log(options.rootValue.request.user);
      next()
    },
    post: (next, value) => {
      next()
    }
  },
  singular: {
    pre: (next, root, args, request, options) => {
      console.log(options.rootValue.request.user);
      next();
    },
    post: (next, value, args, context) => {
      next();
    }
  },
  plural: {
    pre: (next, root, args, request, options) => {
      console.log(options.rootValue.request.user);
      next();
    },
    post: (next, value, args, context) => {
      next();
    }
  },
  mutation: {
    pre: (next, args, context, options) => {
      console.log(options.rootValue.request.user);
      next();
    },
    post: (next, value, args, context) => {
      next();
    }
  }
}

module.exports = hooks

Somehow nested viewer change an order of arguments, and here's a problem

  plural: {
    pre: (next, root, args, request, options) => {

      // Normal plural query will return `root.request.user` properly
      // But mutation with viewer plural will return `{_type: "Viewer", id: "viewer"}` 
      // and `root.request` will be `undefined`
      console.log(root.request.user);

      // Working both query, mutation
      console.log(options.rootValue.request.user);

      next();
    }

Took me a day to figure this out 🤕

from graffiti-mongoose.

tothandras avatar tothandras commented on June 23, 2024

Thanks for finding this! PR's are welcomed if you have time to fix it @cellis, @katopz!

from graffiti-mongoose.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.