Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

176
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda