He intentado muchas veces cosas diferentes, pero no puedo entender que cada vez que guardo datos en MongoDB, ¿por qué obtengo el nombre de ese documento como se muestra a continuación?
Usuario.js
const mongoose = require("mongoose"); const Schema = mongoose.Schema; const userSchema = new Schema({ email: { type: String, require: true, unique: true, lowercase: true, }, username: { type: String, require: true, unique: true, maxLength: 7, }, password: { type: String, require: true, minLength: 8, }, }); const User = mongoose.model("user", userSchema); module.exports = User;Cuando guardé los datos presionando la API a través del cartero e imprimiendo los datos en la consola, los datos que recibo son los siguientes:
email { _id: new ObjectId("627a4ae94b8958e3fe968311"), email: 'abc@abc.com', username: 'fzee07', password: 'test1234', __v: 0 }Entonces, mi pregunta es por qué este objeto se guarda y se nombra como "correo electrónico" .
registrarseUsuario.js
const User = require("../../models/User"); const registerUser = async (req, res) => { const { email, username, password } = req.body; try { const e_mail = await User.findOne({}); console.log("email", e_mail); if (e_mail.email === email) { res.status(409).json({ success: false, msg: "User already exists", }); } else { if (username.length < 8) { if (password.length >= 8) { const user = User.create({ email, username, password }); res.status(201).json({ success: true, data: "User Created", }); } else { res.status(401).json({ success: false, data: "Password muste be minimum 8 characters", }); } } else { res.status(401).json({ success: false, data: "Username must be less than 8 characters", }); } } } catch (err) { console.log(err); } }; module.exports = registerUser;Ahora entiendo el problema. Disculpe la confusión, leí mal la segunda parte de su pregunta. La razón por la que obtienes esto en la consola:
email { _id: new ObjectId("627a4ae94b8958e3fe968311"), email: 'abc@abc.com', username: 'fzee07', password: 'test1234', __v: 0 } Es porque está registrando en la consola la cadena "email" , luego su objeto de usuario de la base de datos, que confusamente ha llamado e_mail .
Cambie el mensaje de registro para que se vea así, y estará bien:
console.log("user", e_mail);De hecho, su código necesita una refactorización severa. En este momento, no es muy legible. Aquí hay una mejora:
const User = require('../../models/User'); const registerUser = async (req, res) => { const { email, username, password } = req.body; try { // Find a user with that email const user = await User.findOne({ email }); console.log('user', user); // if it exists, return if (user) { res.status(409).json({ success: false, message: 'User already exists', }); return; } // Validate the username and password // If validates, create the user if (username.length < 8 && password.length >= 8) { const newUser = User.create({ email, username, password }); res.status(201).json({ success: true, message: 'User created', data: newUser, }); return; } // If all else fails, return 401 res.status(401).json({ success: false, message: 'Username must be less than 8 characters & password must be at least 8 characters long', }); } catch (err) { res.status(500).json({ success: false, message: 'Server error', }); } }; module.exports = registerUser; Cambié todos los lugares donde tenías la clave de data para tener la clave de message , ya que los mensajes eran los valores.
Sin embargo, una vez más, realmente recomiendo hacer la validación en el middleware/hooks de Mongoose en lugar de hacerlo directamente dentro de la ruta. Le ahorrará dolores de cabeza a medida que crezca su aplicación.