• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

147
Views
Cómo enviar la respuesta de la promesa de objeto de clase al controlador en nodeJS

Tengo una pregunta. Estoy usando una aplicación NodeJS dividida en tres partes principales

  1. Objeto de acceso a datos Aquí, creé una función que hace la interacción directa con la base de datos solo en este archivo.

    const { respuesta } = require('expreso'); const db = require('../conexión/db.js');

    /* Exportar */ module.exports = { // Insertar usuario insertUser: (parámetros) => { const sqlStatement = '¿INSERTAR EN EL CONJUNTO de usuarios?'; devolver nueva promesa ((resolver, rechazar) => { db.query(sqlStatement, parámetros, (error, respuesta) => { if (error) { devolver rechazar (error); } devolver resolver (respuesta); }) }) } }

  2. Clase de objeto En esta clase, haré la validación y crearé el método con argumentos, luego implementaré el objeto de acceso a datos insertUser .

     const db = require('../dataAccessObject/dao.js');

    class User { constructor (fname, lname, edad, correo electrónico, contraseña, avatar, género) { this.fname = fname; this.lname = lname; esta.edad = edad; este.email = correo electrónico; this.contraseña = contraseña; este.avatar = avatar; this.género = género; }

     /* Methods */ createUser() { db.insertUser({ 'firstName' : this.fname, 'lastName' : this.lname, 'age' : this.age, 'email' : this.email, 'password' : this.password, 'userAvatar' : this.avatar, 'gender' : this.gender }) .then(() => { console.log(this); return this; }) .catch(error => { if (error.code == 'ER_DUP_ENTRY' && error.errno === 1062) throw new Error('This email is allready in use') else throw error; }) } /* Validations */

    }

    módulo.exportaciones = Usuario;

  3. Controlador

    const nuevoUsuario = nuevo Usuario("fname", "lname", 22, "ema2121il", "contraseña", "avatar", "género"); nuevoUsuario.createUser(); res.send(nuevoUsuario)

Necesito encontrar una manera de pasar los errores de validación o el error duplicado del punto 2 (clase de objeto) al controlador.

Por favor, ¿cómo puedo hacer esto?

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Entonces, si su objetivo es devolver datos al controlador expreso (de la clase). La mejor manera es utilizar la biblioteca Promise. Entonces su función createUser debería verse así:

 createUser() { return new Promise ((resolve, reject) => { db.insertUser({ 'firstName' : this.fname, 'lastName' : this.lname, 'age' : this.age, 'email' : this.email, 'password' : this.password, 'userAvatar' : this.avatar, 'gender' : this.gender }) .then(() => { console.log(this); this.runValidations() return resolve(this); }) .catch(error => { if (error.code == 'ER_DUP_ENTRY' && error.errno === 1062) { return reject('This email is already in use') } else { return reject(); } }) }); }

Luego, para utilizarlo desde su controlador, utilice async/await para utilizar el método.

 //The Controller Code app.get('/create-user', async(req, res) => { const user = new User(req.body) // Assuming this is how you're instantiating class try { const newUser = await user.createUser(); console.log("User is Created"); } catch (err) { //Your Error will be available here. console.log("Your Error: ", err) } })

Esto debería darte lo que necesitas :)

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error