Javascript 如何使用GraphQL和Mongoose处理多个验证错误?
伙计们。我正在使用Apollo服务器使用一个用户注册解析器,我不确定我们应该如何处理Mongoose模型验证中抛出的多个错误 目前为止,我有一个当前的模型,用于存储我正在开发的这个小应用程序的用户:Javascript 如何使用GraphQL和Mongoose处理多个验证错误?,javascript,mongoose,graphql,apollo-server,Javascript,Mongoose,Graphql,Apollo Server,伙计们。我正在使用Apollo服务器使用一个用户注册解析器,我不确定我们应该如何处理Mongoose模型验证中抛出的多个错误 目前为止,我有一个当前的模型,用于存储我正在开发的这个小应用程序的用户: const userSchema = new Schema({ username: { type: String, required: true, unique: true }, email: { type: S
const userSchema = new Schema({
username: {
type: String,
required: true,
unique: true
},
email: {
type: String,
required: true,
validate: {
validator: (value) => validator.isEmail(value),
message: (data) => `${data.value} is not a valid e-mail address!`
},
unique: true
},
digest: String,
});
我正在使用mongoose unique validator
来确保username
和email
是唯一的,如果不是,就会抛出错误
问题是,我不知道如何处理同时抛出的这两个错误(如果文档为.save()
d时电子邮件和用户名都无效)
我使用GraphQL测试了这个案例,这就是当这些验证都被触发(并且都失败)时得到的结果:
根据我从文档中了解到的情况,我最希望接收一系列可以迭代的错误,但我不确定如何实现这一点,因为Mongoose只是将两个验证错误连接到一个消息中,该消息作为一个单一错误抛出
以下是解析程序:
import bcrypt from 'bcrypt';
import { ApolloError } from 'apollo-server-express';
import validator from 'validator';
import { User } from '../db/db';
const resolvers = {
Mutation: {
createUser: (_, args) => {
const {username, password, email} = args;
return bcrypt.hash(password, 12)
.then((digest) => {
const doc = { username, digest, email };
const newUser = new User(doc);
return newUser.save();
})
.then((doc) => {
return doc;
})
.catch((err) => {
throw new ApolloError(`Couldn't create user: ${err}`);
});
}
}
};
export default resolvers;
关于如何在.save()
的承诺中使用.catch()
,我需要对Apollo Server做些什么吗?我很困惑。我只知道我希望能够在客户机上独立地检查这两个错误(如突出显示输入字段等),所以我想我需要让它抛出一系列错误,而不仅仅是一个“捆绑”错误
想法
import bcrypt from 'bcrypt';
import { ApolloError } from 'apollo-server-express';
import validator from 'validator';
import { User } from '../db/db';
const resolvers = {
Mutation: {
createUser: (_, args) => {
const {username, password, email} = args;
return bcrypt.hash(password, 12)
.then((digest) => {
const doc = { username, digest, email };
const newUser = new User(doc);
return newUser.save();
})
.then((doc) => {
return doc;
})
.catch((err) => {
throw new ApolloError(`Couldn't create user: ${err}`);
});
}
}
};
export default resolvers;