node.js - 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
});
解决方案
在寄存器中定义 userDetail。在突变时,userDetail 字段不可为空。你必须定义它。
推荐阅读
- django - 如果用户忘记了密码,我如何给他发送重置链接?
- r - 在 R sqldf 包中按类别进行索引并按列排序
- mysql - mysql多个值()包含,需要根据条件更新
- elasticsearch - 分布式爬取和限速/流量控制
- powershell - 具有复合键的自定义 powershell DSC 资源
- amazon-web-services - 带有 Lambda 代理的 AWS API Gateway 提供空事件数据
- azure - 从 DBFS 挂载到 Azure Data Lake 创建新表
- c# - 定义接口的数据类型类
- angular - 创建(实例化)声明类型的打字稿对象
- javascript - 将背景颜色更改为此文本框中的代码