Hello everyone,
I’m following the MERNG Tutorial from the freeCodeCamp Youtube channel.
But I’m stuck in the topic Register & Login Users.
By the timestamp 56:55 the instructor runs a query with GraphQL.
I’m getting this error message:
{
"errors": [
{
"message": "Usuario validation failed: senha_usuario: Cast to string failed for value \"Promise { <pending> }\" at path \"senha_usuario\"",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"registrar"
],
}
],
[...]
"data": {
"registrar": null
}
}
graphql/typeDefs.js
const gql = require('graphql-tag');
module.exports = gql`
type Postagem {
id: ID!
conteudo_postagem: String!
postagem_criada: String!
nome_usuario: String!
},
type Query {
getPostagens: [Postagem]
},
input DadosRegistro {
nome_usuario: String!
senha: String!
confirmarSenha: String!
email: String!
},
type Usuario {
id: ID!
email: String!
token: String!
nome_usuario: String!
usuario_criado: String!
},
type Mutation {
registrar(dadosRegistro: DadosRegistro): Usuario
}
`
graphql/resolvers/usuario.js
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const { UserInputError } = require('apollo-server');
// Chave para codificar o token
const { JWT_KEY } = require('../../config.js');
const Usuario = require('../../modelos/Usuario.js');
module.exports = {
Mutation: {
async registrar(_, { dadosRegistro: { nome_usuario, senha, confirmarSenha, email } }){
// Checando se o usuario já existe
const usuario = await Usuario.findOne({ nome_usuario })
if(usuario){
throw new UserInputError('Nome de usuário já existe', {
erros: {
nome_usuario: 'Este nome de usuário já existe'
}
})
}
// Criptografando senha
senhaHashed = bcrypt.hash(senha, 12);
const novoUsuario = new Usuario({
nome_usuario,
senha_usuario: senhaHashed,
email_usuario: email,
usuario_criado: new Date().toISOString()
});
const resultado = await novoUsuario.save();
const token = jwt.sign({
id: resultado.id,
email: resultado.email_usuario,
nome_usuario: resultado.nome_usuario
}, JWT_KEY, { expiresIn: '1h' })
return {
...resultado._doc,
id: resultado._id,
token
}
}
}
}
I’ll wait for answers. Thank you.