我正在编写用于在NodeJS中登录用户的变体。
出现错误“必须提供名称”。
这是浏览器GraphQL查询:
mutation{
login(username:"dfgdfg",password:"test1234") {
_id,
name{
fname,
lname,
mname
}
}
}
这是我的代码
const login = {
type: UserType,
args: {
input:{
name:'Input',
type: new GraphQLNonNull(new GraphQLObjectType(
{
username:{
name:'Username',
type: new GraphQLNonNull(GraphQLString)
},
password:{
name:'Password',
type: new GraphQLNonNull(GraphQLString)
}
}
))
}
},
resolve: async (_, input, context) => {
let errors = [];
return UserModel.findById("5b5c34a52092182f26e92a0b").exec();
}
}
module.exports = login;
任何人都可以帮助我,为什么它会出错?
谢谢。
答案 0 :(得分:1)
描述错误发生的位置 也是非常有帮助的。我假设它是在启动节点服务器时抛出的。
抛出此特定错误,因为您缺少对象配置的第8行中的name
属性。同样,该类型必须为GraphQLInputObjectType
而非GraphQLObjectType
。
args: {
input: {
type: new GraphQLNonNull(new GraphQLInputObjectType({
name: 'LoginInput',
fields: {
username:{
name:'Username',
type: new GraphQLNonNull(GraphQLString)
},
password:{
name:'Password',
type: new GraphQLNonNull(GraphQLString)
}
}
}))
}
},
您的代码中还有很多其他问题:
您的代码中并未使用所有name
属性(您可能是为了解决错误而添加了它们)。
您的查询与架构定义不匹配,要么直接在字段上使用两个参数username
和password
,而不必使用额外的输入类型:
args: {
username:{
name:'Username',
type: new GraphQLNonNull(GraphQLString)
},
password:{
name:'Password',
type: new GraphQLNonNull(GraphQLString)
}
},
或者采用Anthony所述的查询方式:
mutation{
login(input: { username: "dfgdfg",password: "test1234" }) {
_id,
name{
fname,
lname,
mname
}
}
}