почему возвращение graphql «не может вернуть null для необнуляемого поля mutation.createAccnt» - PullRequest
0 голосов
/ 27 апреля 2020

Я создаю учетные записи для новых пользователей с помощью этой мутации createaccnt, но в итоге я получил ошибку выше, смотрел на нее в течение нескольких дней ... Может кто-нибудь указать, где я ошибся и исправил. вот коды. как я определил свою схему

const userSchema = new Schema({
    username:String,
    email:String,
    Password:String,
    addedOn:String

});

определения типа

//user type definitio

type User{
    id:ID!,
    username:String!,
    email:String!,
    token:String!,
    Password:String!,
    addedOn:String!,

},
input UserInput{
  email:String!,
  username:String!,
  Password:String!,
  confirmPassword:String!
},
//mutation
type Mutation{
    createAccnt ( userInput:UserInput!) : User!
      }
так я реализовал мутацию

//createAccnt 
async createAccnt(parent,{userInput:{
            email,
            username,
            Password,
            confirmPassword
        }},context,info){
            try {
                const {errors,valid}=validateUserInput(
                    email,
                    username,
                    Password,
                    confirmPassword
                );
                //allow for error detection
                if(!valid){
                    throw new UserInputError('errors',{errors})
                };
                //check if user already exist
                const user= await User.findOne({username});
                if(user){
                    throw new UserInputError('username is taken',{
                        errors:{
                            username: 'username is taken'
                        }
                    });
                };
                //hash password
                Password= await bcrypt.hash(Password,12);
                //create a new user object
                const newUsr= new User({
                    email,
                    username,
                    Password,
                    addedOn:new Date().toISOString()
                });

                //save to db
                const res=await newUsr.save();
                //web token
                const token= jwt.sign({
                    id:res.id,
                    email:res.email,
                    usernaem:res.username
                },SECRET_KEY,{expiresIn:'1h'});


                return{
                    ...res._doc,
                    id:res._id,
                    token
                }
            }
             catch (error) {
                throw new Error(error)
            }

Я тщательно проверил код, не могу определить ошибку. Помогите определить и исправить, где это возможно.

1 Ответ

0 голосов
/ 27 апреля 2020

Если вы не знаете, как обращаться с капотом.

type User{
    id:ID!,
    username:String!,
    email:String!,
    token:String!,
    Password:String!,
    addedOn:String!,

}

"!" это значит, что не может возвращать «ноль», поэтому убедитесь, что ваш код правильно возвращает пользователя. Выше это означает, что вы должны возвращать объект User, подобный этому.

return {
    id: "some id here",
    username: "some username here",
    email: "some email here",
    token:"token here",
    Password:"pass here",
    addedOn: "date here",

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...