Why am I getting "Cannot return null for non-nullable field User.sentEmail."?

1k Views Asked by At

I understand that I would receive this error if the field I am trying to call is null, but when I do a create email, that email's id does gets saved in the user. But when I try to query that user using the following query

query all {
  users{
    sentEmail{
      sender
      emailbody
      recipient
    }
  }
}
}

I get the error "Cannot return null for non-nullable field User.sentEmail." If there is a id in sentEmail, why am I getting this error

Resolver

const { Email, User } = require('../models')

const resolvers = {
    Query : {
        users : async () => {
            return await User.find({}).populate('emails');
        },
        emails : async (parent, { email }) => {
            const params = email ? { email } : {};
            return await Email.find(params).sort({ sentDate: -1 });
        },
    },
    Mutation : {
        addemail : async (parent, {sender, recipient, subject, emailbody}) => {
            const newemail = await Email.create({ sender, recipient, subject, emailbody});

            await User.findOneAndUpdate(
                { email: newemail.sender },
                { $addToSet : { sentEmails: newemail._id }}
            )

            await User.findOneAndUpdate(
                { email: newemail.recipient },
                { $addToSet : { receivedEmails: newemail._id }}
            )

            return newemail
        },
        addUser: async (parent, { firstName , lastName , email, password }) => {
            const user = await User.create({ firstName , lastName , email, password }, {new: true})
        },
    }
};

module.exports = resolvers

typeDefs

const { gql } = require('apollo-server-express');

const typeDefs = gql`
    type User {
        _id : ID
        firstName : String
        lastName : String
        email : String
        password : String
        sentEmail: [Email]!
    }
    
    type Email {
        _id : ID
        sender : String
        recipient : String
        emailbody : String
        sentDate : String
    }

    type Query {
        users : [User]
        emails(email: String) : [Email]
    }

    type Mutation {
        addemail(sender: String!, recipient: String!, subject: String , emailbody: String!): Email
        addUser(firstName: String!, lastName: String!, email: String!, password: String! ): User
    }
`;

module.exports = typeDefs;

1

There are 1 best solutions below

0
Deepak Kumar On

Please check your response from the resolver. Seems it is returning the value of sentEmail field as null or sentEmail field is not present in your response json.