Estoy tratando de responder en caso de que una búsqueda de un elemento no devuelva algo de otro método que no tenga la respuesta expresa. A este método lo llamo de otro que si tiene la respuesta expresa:
const updateItem = async (req, res = response ) => { const id = req.params.id; const idItem = req.params.idItem; await itemExists( id, idItem); ...Y en la función itemExists() busco el elemento en mongo y si no existe quiero enviarlo como respuesta pero no sé cómo hacerlo sin usar la respuesta Express:
const itemExists = async ( id, idItem ) => { const item = await PettyCashItems.findOne({ _id: id, "items._id": idItem }); if (!item) { return ...... } }Gracias.
Como ya se mencionó en uno de los comentarios, no hay forma de usar el objeto de respuesta sin tener acceso a él.
Sin embargo, lo que desea se puede lograr de dos maneras:
1- Manera fácil: devuelva un valor de la función itemExists y envíe la respuesta de acuerdo con el valor devuelto de itemExists
const updateItem = async (req, res = response ) => { const id = req.params.id; const idItem = req.params.idItem; const exists = await itemExists( id, idItem); if (exists) { res.send('YES') return; } res.send('NO'); }2- Mejor manera: configure el manejo de errores para su aplicación express para que todos los errores lanzados sean capturados y la respuesta se envíe en función del error lanzado, luego puede simplemente
class BaseHTTPException extends Error { constructor(statusCode) { super(); this.statusCode = statusCode; } } class ItemDoesNotExistException extends BaseHTTPException { constructor() { super(400) } } throw new ItemDoesNotExistException()en su función itemExists.
Lectura adicional: https://expressjs.com/en/guide/error-handling.html