首页 > 解决方案 > Node.js GraphQL 突变定义不起作用

问题描述

我想使用 express-graphql 和 mongoose 包在数据库中记录一个表。表中的一个字段本身包含许多字段。如果您花时间看一看,我将不胜感激。我在嵌套 json 数据方面遇到了麻烦。

Graphql 语法

在此处输入图像描述

我的文件。

用户模型文件。类型文件,变异文件

用户模型:

const mongoose = require("mongoose");

 const userSchema = new mongoose.Schema(
  {
    userName: {
      type: String,
      required: true,
    },
    userLastname: {
      type: String,
      required: true,
    },
    userEmail: {
      type: String,
      required: true,
    },
    userPassword: {
      type: String,
      required: true,
    },
    userFirebaseToken: {
      type: String,
    },
    userActive: {
      type: String,
    },
    userImage: {
      type: String,
    },

    userDetail: {
      userTitle: {type:String},
      userCity: {type:String},
    }
    
  
  },
  { timestamps: true }
);

module.exports = mongoose.model("user", userSchema);

类型文件

const {
  GraphQLObjectType,
  GraphQLString,
  GraphQLID,
  GraphQLList,
} = require("graphql");

const { User } = require("../models");

 
const UserDetailType = new GraphQLObjectType({
  name: "UserDetail",
  description: "UserDetail Type",

  fields: () => ({
     
    userTitle: { type: GraphQLString },
    userCity: { type: GraphQLString },  
     
  }),
});
 
const UserType = new GraphQLObjectType({
  name: "User",
  description: "User Type",

  fields: () => ({
    id: { type: GraphQLID },
    userName: { type: GraphQLString },
    userLastname: { type: GraphQLString },
    userEmail: { type: GraphQLString },
    userPassword: { type: GraphQLString },
    userFirebaseToken: { type: GraphQLString },
    userActive: { type: GraphQLString },
    userImage: { type: GraphQLString },
    UserDetail: {
     type:UserDetailType
    }
   
  }),
});

module.exports = { UserType,UserDetailType };

突变文件

const { GraphQLString, GraphQLList } = require("graphql");
//const {createJwtToken} = require("../util/auth")
const { UserType,userDetailType } = require("./types");
const { User } = require("../models");

const register = {
  type: UserType,
  args: {
    userName: { type: GraphQLString },
    userLastname: { type: GraphQLString },
    userEmail: { type: GraphQLString },
    userPassword: { type: GraphQLString },
    userFirebaseToken: { type: GraphQLString },
    userActive: { type: GraphQLString },
    userImage: { type: GraphQLString },
    userDetail: 
    {
      userTitle: { type: GraphQLString },
      userCity: { type: GraphQLString },
   }
  
  },
  async resolve(parent, args) {
    const {
      userName,
      userLastname,
      userEmail,
      userPassword,
      userFirebaseToken,
      userActive,
      userImage,
      userDetail: {
        userTitle,
        userCity
      }
     
    } = args;

    const user = new User({
      userName,
      userLastname,
      userEmail,
      userPassword,
      userFirebaseToken,
      userActive,
      userImage,
      userDetail: {
        userTitle,
        userCity
      }  
    });

   

    const result = await user.save();
    console.log(result);
    return result;
  },
};

module.exports = { register };

架构文件

// import Graphql
const {GraphQLSchema,GraphQLObjectType} =require("graphql");

// import Queries

const {  users } =require("./queries")

// import Mutations

const {  register  } =require("./mutations")


// import QueryType

const  QueryType  =new GraphQLObjectType({
    name:"QueryType",
    description:"Queries",
    fields:{ users }
});


// define MutationType

const MutationType  =new GraphQLObjectType({
    name:"MutationType",
    description:"Mutations",
    fields:{ register }
});

module.exports = new GraphQLSchema({
    query: QueryType,
    mutation: MutationType
});

标签: node.jsgraphql

解决方案


在寄存器中定义 userDetail。在突变时,userDetail 字段不可为空。你必须定义它。


推荐阅读