Quiero enviar una respuesta json personalizada en cada solicitud al final como:
{ "message": "Something", "type": "success", "payload": /*object, array, anything else */ }Lo que puedo hacer es al final de cada uso de solicitud:
res.status(200).json({message: 'Something', type: 'success', payload});Si por alguna razón quiero que mis respuestas tengan otro formato, tengo que ir y cambiar cada res.json, lo cual es malo.
Pero como sé que todas mis respuestas tendrán este formato, ¿hay alguna forma de crear un middleware y pasar algunas variables como carga útil, mensaje, tipo que se ejecuta al final de cada solicitud?
Es posible crear un midleware para la respuesta.
router.get('/some-route', controller.someFunction, resposeMiddleware)Debería pasar la respuesta como un argumento en la próxima llamada
someFunction (req, res, next) => { res.local.payload = {/* some data */} next() }el resposeMiddleware sería algo como esto
const resposeMiddleware = (req, res) => { const { payload } = res.local res.status(200).json({message: 'Something', type: 'success', payload}) }Cree un método auxiliar como el siguiente (successResponse.js). También puede establecer cualquier propiedad por defecto.
successResponse = (res, statusCode, message, data) => { res.status(statusCode || 200).json({ code: statusCode || 200, message: message || "success", data: data || {}, }); }; module.exports = successResponse;ahora en su controlador solo importe SuccessResponse y utilícelo como
successResponse(res, 200, "Your Success message", data);