index.js 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.PRAS = void 0;
  4. class PRAS {
  5. getPRASResultObject(statusCode = 200, status = "OK", message = "", data = null, code = "UNKNOWN_CODE", extra = null) {
  6. return {
  7. statusCode,
  8. status,
  9. message,
  10. data,
  11. code,
  12. extra,
  13. };
  14. }
  15. responseMiddleware() {
  16. // eslint-disable-next-line @typescript-eslint/ban-types
  17. return (req, res, next) => {
  18. res.pras = {
  19. ok: (message, data, code, extra) => {
  20. res.json(this.getPRASResultObject(200, "OK", message, data, code, extra));
  21. },
  22. created: (message, data, code, extra) => {
  23. res.json(this.getPRASResultObject(201, "OK", message, data, code, extra));
  24. },
  25. badRequest: (message, data, code, extra) => {
  26. res.json(this.getPRASResultObject(400, "FAIL", message, data, code, extra));
  27. },
  28. unauthorized: (message, data, code, extra) => {
  29. res.json(this.getPRASResultObject(401, "FAIL", message, data, code, extra));
  30. },
  31. forbidden: (message, data, code, extra) => {
  32. res.json(this.getPRASResultObject(403, "FAIL", message, data, code, extra));
  33. },
  34. notFound: (message, data, code, extra) => {
  35. res.json(this.getPRASResultObject(404, "FAIL", message, data, code, extra));
  36. },
  37. serverError: (message, data, code, extra) => {
  38. res.json(this.getPRASResultObject(500, "ERROR", message, data, code, extra));
  39. },
  40. customMessage: (statusCode, message, data, code, extra) => {
  41. let status;
  42. if (statusCode >= 500) {
  43. status = "ERROR";
  44. }
  45. else if (statusCode >= 400) {
  46. status = "FAIL";
  47. }
  48. else {
  49. status = "OK";
  50. }
  51. res.json(this.getPRASResultObject(statusCode, status, message, data, code, extra));
  52. },
  53. };
  54. const rawHeaders = req.rawHeaders;
  55. let foundHeaderIndex = -1;
  56. for (let i = 0; i < rawHeaders.length; i++) {
  57. if (rawHeaders[i] === "Accept") {
  58. foundHeaderIndex = i;
  59. break;
  60. }
  61. }
  62. if (rawHeaders.hasOwnProperty("Accept") &&
  63. rawHeaders[foundHeaderIndex].includes("application/json")) {
  64. const send = res.send;
  65. res.send = (body) => {
  66. try {
  67. if (typeof body === "string") {
  68. body = JSON.parse(body);
  69. }
  70. if (typeof body === "string") {
  71. body = { data: body };
  72. }
  73. else if (!body.hasOwnProperty("data")) {
  74. body = { data: body };
  75. }
  76. const prasBody = this.getPRASResultObject(body.statusCode, body.status, body.message, body.data, body.code, body.extra);
  77. res.status(prasBody.statusCode || 200);
  78. delete prasBody.statusCode;
  79. return send.call(res, JSON.stringify(prasBody));
  80. }
  81. catch (err) {
  82. return send.call(res, body);
  83. }
  84. };
  85. }
  86. next();
  87. };
  88. }
  89. }
  90. exports.PRAS = PRAS;
  91. exports.default = new PRAS();