我正在使用 MERNG 堆栈来开发应用程序。我在 apollo-server 游乐场中收到此错误
{
"errors": [
{
"message": "Errors",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"register"
],
"extensions": {
"errors": {},
"code": "BAD_USER_INPUT",
"exception": {
"errors": {},
"stacktrace": [
"UserInputError: Errors",
在项目中,所有用户输入都是字符串,我的 typeDef.js 看起来像这样
const { gql } = require("apollo-server");
module.exports = gql`
type Post {
id: ID!
body: String!
createdAt: String!
username: String!
}
type User {
id: ID!
email: String!
token: String!
username: String!
createdAt: String!
}
input RegisterInput {
username: String!
password: String!
confirmPassword: String!
email: String!
}
type Query {
getPosts: [Post]
getPost(postId: ID!): Post
}
type Mutation {
register(registerInput: RegisterInput): User!
login(username:String!, password:String!):User!
}
`;
突变 registerInput 的解析器如下所示
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const { UserInputError } = require("apollo-server");
const User = require("../../models/User");
const { SECRET_KEY } = require("../../config");
const {
validateRegisterInput,
validateLogin,
} = require("../../utils/validators");
module.exports = {
Mutation: {
async register(
_,
{ registerInput: { username, password, confirmPassword, email } },
context,
info
) {
//validate the users
const { errors, valid } = validateRegisterInput(
username,
password,
confirmPassword,
email
);
if (!valid) {
throw new UserInputError("Errors", { errors });
}
const user = await User.findOne({ username });
if (user) {
throw new UserInputError("username exists", {
errors: {
username: "username is taken",
},
});
}
password = await bcrypt.hash(password, 12);
const newUser = User({
username,
email,
password,
createdAt: new Date().toString(),
});
const res = await newUser.save();
const token = jwt.sign(
{
id: user.id,
email: user.email,
username: user.username,
},
SECRET_KEY,
{ expiresIn: "1hr" }
);
return {
...res._doc,
id: res._id,
token,
};
},
},
};
我已经在其他文件中定义了所有用户验证。
当我在操场上查询 register 突变时,它的抛出错误如上所述。 查询看起来像这样
mutation{
register(
registerInput:{
username:"user"
password:"12345678"
confirmPassword:"12345678"
email:"hello@gmail.com"
}
){
id
username
token
email
}
}
我知道如果 GraphQL 操作包含无效的字段参数值,我们将收到 BAD_USER_INPUT 错误。 但我想我已经为寄存器提供了正确的输入值。
有人可以帮忙解决代码中的问题吗?