Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

245
Vistas
NodeJS: función que no devuelve res.json

Así que estoy haciendo una API de publicación para el registro/registro. Si un usuario se ha registrado con éxito, se le proporcionará un token de acceso para guardarlo en la interfaz. Todo funciona, el nombre de usuario y la contraseña se guardan en la base de datos junto con el token. Pero el token de acceso no regresa. He usado mongoDB como mi base de datos y usé mongoose. Aquí lo que he hecho hasta ahora:
Código editado

 const UserModel = require("../models/userModel"); var bcrypt = require("bcryptjs"); const jwt = require("jsonwebtoken"); const registration = async (req, res) => { try { const { email, password } = req.body; if (!(email && password)) { res.status(400).send("All input is required"); } const existingEmail = await UserModel.find({ email: email }); if (existingEmail.length === 0) { const userToken = jwt.sign({ email: email }, process.env.SECRET, { expiresIn: "90d", }); let hashedPassword = await bcrypt.hash(password, 8); const user = await UserModel.create({ email, password: hashedPassword, token: userToken, }); await userRegistration.save(function (err, result) { if (err) { console.error(err); } else { console.log(result); } }); res.json(userToken); } else { res.json("email has already been registered"); } } catch (err) { res.json(err); } }; module.exports = registration;

si pruebo la API en Thunder Client en vscode, devuelve {}, un objeto vacío. Por favor dime que he hecho mal?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

const existingEmail = await UserModel.find({ email }); Esta línea suya le proporcionará la matriz de todos los usuarios porque la propiedad de email no tiene nada, será como .find({})

Si está verificando si el email insertado por el usuario ya está en su base de datos o no, le sugiero que lo haga así: const existingEmail = await UserModel.find({ email : email});
Esto devolverá el documento con el valor de la propiedad de email igual al correo electrónico que recibió en req.body es decir, email : xyz@gmail.com

Y en esta línea const userToken = jwt.sign({ email }, process.env.SECRET, {expiresIn: "90d",}); Vuelves a cometer el mismo error. El objeto que pasa en la carga útil tiene la propiedad de email , pero no se asigna ningún valor/correo electrónico a esa propiedad. Es como el email : undefined

Aquí, hazlo así jwt.sign({email : email}, process.env.SECRET, {expiresIn: '90d')})

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aparte de lo que se ha mencionado en las otras respuestas, me parece que no le estás dando el token a res.json en ninguna parte.

Su función es devolver el token, pero no creo que vaya a ninguna parte. Debe pasar el token a res.json, no regresar de la función.

Está utilizando await así como .then() , lo que me parece incorrecto. Tienes que usar solo uno de ellos.

Actualización: jwt.sign devuelve una cadena, por lo que userToken contiene una cadena. Le está dando esa cadena a res.json que espera un json. Tienes que pasarle un objeto.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Entonces, cometí un simple error en el código. Estaba tratando de guardar el registro de usuario que no estaba definido. Por eso estaba ocurriendo el error. Debería tener más cuidado con esto.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda