Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

180
Views
TypeError: .then no es una función

Tengo un error cuando el usuario no es administrador, no muestra mi mensaje "No autorizado para acceder a esta página" porque en su lugar aparece este error en la consola:

 TypeError: productController.createProduct(...).then is not a function

Tengo un router configurado así:

 router.post('/create',auth.verify, (req, res)=>{ const isAdmin = auth.decode(req.headers.authorization).isAdmin; productController.createProduct(req.body,isAdmin).then(result => res.send(result));})

Y mi controlador:

 module.exports.createProduct = (reqBody, isAdmin) => { if (isAdmin === true) { let newProduct = new Product({ name: reqBody.name, description: reqBody.description, price: reqBody.price, }); return newProduct.save().then((result, error) => { return error ? false : 'Successfully created a product'; }); } else { return 'Not authorized to access this page'; } };

Sin embargo, todo funciona bien cuando el usuario es un administrador. Me pregunto si esto tiene algo que ver con la forma en que devuelvo mi mensaje cuando el usuario no es administrador. ¿Porque estoy usando promesas?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Debe devolver una promesa tanto en casos de éxito como de error:

 module.exports.createProduct = (reqBody, isAdmin) => { if (isAdmin === true) { let newProduct = new Product({ name: reqBody.name, description: reqBody.description, price: reqBody.price, }); return newProduct.save().then((result, error) => { return error ? false : 'Successfully created a product'; }); } else { // Return a promise here return Promise.reject('Not authorized to access this page'); } };
about 4 years ago · Juan Pablo Isaza Report

0

Hay esencialmente dos formas de abordar este problema.

En la primera forma, puede abordar el diseño general de su API y hacer que el código sea más efectivo.

Por ejemplo, si su operación es exitosa debido al hecho de que el user es admin o no, puede responder con Promise.reject o Promise.resolve. Pero, si está devolviendo un Promise.reject desde la función createProduct , también debe actualizar la forma en que maneja el rechazo en el controlador.

Por ejemplo:

crearProducto.js

 module.exports.createProduct = (reqBody, isAdmin) => { if (isAdmin === true) { let newProduct = new Product({ name: reqBody.name, description: reqBody.description, price: reqBody.price, }); return newProduct.save().then((result, error) => { return error ? false : 'Successfully created a product'; }); } else { // Return a promise here return Promise.reject('Not authorized to access this page'); } };

controlador.js

 router.post('/create',auth.verify, (req, res)=>{ const isAdmin = auth.decode(req.headers.authorization).isAdmin; productController.createProduct(req.body,isAdmin) .then(result => res.send(result)) .catch(error => res.send(error)); // catch will be executed due to Promise.reject })

O, en la segunda forma, puede simplemente devolver una Promise.resolve desde el bloque else de la función createProduct.

Ejemplo:

return Promise.resolve("Not authorized to access this page")

Y en este caso, no necesita actualizar el código de su controlador.

Recomendaría seguir la forma .then .catch de hacer las cosas para detectar cualquier error que pueda enfrentar con la parte de creación del Producto. Facilita el seguimiento de errores.

about 4 years ago · Juan Pablo Isaza Report

0

Tiene razón en que no funcionará si el usuario no es un administrador y que debe devolver una promesa. La solución más simple es cambiar la instrucción else por la siguiente.

 else{ return Promise.resolve("Not authorized to access this page") }

También puede devolver Promise.reject(new Error("Not authorized to access this page")) que obligaría a cualquier cosa que consuma esta función a manejar un error para este escenario. Eso podría encajar con su diseño, podría no.

about 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!