wmik
wmik

Reputation: 784

GraphQL x MongoDB

I'm trying to read some data from a mongodb database with graphql and mongoose but everytime I query the db it returns null but no error is thrown. Here's the code:

// Controller.js
exports.user_read = function(id) {
  return new Promise((resolve, reject) => {
    Contact.findById(id, function(err, user) {
      err ? reject(err) : resolve(user);
    }
  });
}

// Resolver.js
var contact = require('Controller');
...
// root object passed as rootValue to graphqlHTTP
getUser: ({ id }) => { 
  contact.user_read(id)
}
...

Any tips and help would be appreciated. P.S. This also seems to be happening with all my queries which take the same Promise format in the controller.js file.

Upvotes: 0

Views: 240

Answers (1)

Aaroh Mankad
Aaroh Mankad

Reputation: 176

You need to await contact.user_read(id). Without the await, you are simply sending back a Promise. It's most likely pending when it is returned, therefore the null return.

Including Daniel Rearden's suggestion to get rid of the extra Promise, here's what your code would look like:

// Controller.js
exports.user_read = async id => {
  return Contact.findById(id, (err, user) => {
      err ? reject(err) : resolve(user);
  });
}

// Resolver.js
var contact = require('Controller');
...
// root object passed as rootValue to graphqlHTTP
getUser: ({ id }) => { 
  return await contact.user_read(id)
}
...

Upvotes: 1

Related Questions