Kaynağa Gözat

interception of all res

Pablo Barrera Yaksic 1 yıl önce
ebeveyn
işleme
77c0dd7fab
1 değiştirilmiş dosya ile 60 ekleme ve 26 silme
  1. 60 26
      src/index.ts

+ 60 - 26
src/index.ts

@@ -26,6 +26,7 @@ interface PRASResponse extends Response {
 
 export class PRAS {
   private getPRASResultObject(
+    statusCode: number,
     status: string,
     message: string,
     data: any,
@@ -33,6 +34,7 @@ export class PRAS {
     extra: any
   ) {
     return {
+      statusCode: statusCode || 200,
       status: status || "OK",
       message: message || "",
       data: data || null,
@@ -45,41 +47,39 @@ export class PRAS {
     return (req: Request, res: PRASResponse, next: Function): void => {
       res.pras = {
         ok: (message, data, code, extra) => {
-          res
-            .status(200)
-            .json(this.getPRASResultObject("OK", message, data, code, extra));
+          res.json(
+            this.getPRASResultObject(200, "OK", message, data, code, extra)
+          );
         },
         created: (message, data, code, extra) => {
-          res
-            .status(201)
-            .json(this.getPRASResultObject("OK", message, data, code, extra));
+          res.json(
+            this.getPRASResultObject(201, "OK", message, data, code, extra)
+          );
         },
         badRequest: (message, data, code, extra) => {
-          res
-            .status(400)
-            .json(this.getPRASResultObject("FAIL", message, data, code, extra));
+          res.json(
+            this.getPRASResultObject(400, "FAIL", message, data, code, extra)
+          );
         },
         unauthorized: (message, data, code, extra) => {
-          res
-            .status(401)
-            .json(this.getPRASResultObject("FAIL", message, data, code, extra));
+          res.json(
+            this.getPRASResultObject(401, "FAIL", message, data, code, extra)
+          );
         },
         forbidden: (message, data, code, extra) => {
-          res
-            .status(403)
-            .json(this.getPRASResultObject("FAIL", message, data, code, extra));
+          res.json(
+            this.getPRASResultObject(403, "FAIL", message, data, code, extra)
+          );
         },
         notFound: (message, data, code, extra) => {
-          res
-            .status(404)
-            .json(this.getPRASResultObject("FAIL", message, data, code, extra));
+          res.json(
+            this.getPRASResultObject(404, "FAIL", message, data, code, extra)
+          );
         },
         serverError: (message, data, code, extra) => {
-          res
-            .status(500)
-            .json(
-              this.getPRASResultObject("ERROR", message, data, code, extra)
-            );
+          res.json(
+            this.getPRASResultObject(500, "ERROR", message, data, code, extra)
+          );
         },
         customMessage: (statusCode, message, data, code, extra) => {
           let status;
@@ -90,12 +90,46 @@ export class PRAS {
           } else {
             status = "OK";
           }
-          res
-            .status(statusCode)
-            .json(this.getPRASResultObject(status, message, data, code, extra));
+          res.json(
+            this.getPRASResultObject(
+              statusCode,
+              status,
+              message,
+              data,
+              code,
+              extra
+            )
+          );
         },
       };
 
+      if (/application\/json/.test(res.get("Content-Type"))) {
+        const originalSend = res.send;
+        res.send = (body) => {
+          if (typeof body === "string") {
+            body = JSON.parse(body);
+          }
+          if (typeof body === "string") {
+            body = { data: body };
+          } else if (!body.hasOwnProperty("data")) {
+            body = { data: body };
+          }
+
+          const prasBody = this.getPRASResultObject(
+            body.statusCode,
+            body.status,
+            body.message,
+            body.data,
+            body.code,
+            body.extra
+          );
+          res.status(Number(prasBody) || null);
+          delete prasBody.statusCode;
+
+          return originalSend(JSON.stringify(prasBody));
+        };
+      }
+
       next();
     };
   }