helpers.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { Handler, ErrorRequestHandler } from "express";
  2. import { validationResult } from "express-validator";
  3. import Raven from "raven";
  4. import signale from "signale";
  5. import { CustomError } from "../utils";
  6. import env from "../env";
  7. export const ip: Handler = (req, res, next) => {
  8. req.realIP =
  9. (req.headers["x-real-ip"] as string) || req.connection.remoteAddress || "";
  10. return next();
  11. };
  12. export const error: ErrorRequestHandler = (error, req, res, next) => {
  13. if (env.isDev) {
  14. signale.fatal(error);
  15. }
  16. if (error instanceof CustomError) {
  17. return res.status(error.statusCode || 500).json({ error: error.message });
  18. }
  19. if (env.RAVEN_DSN) {
  20. Raven.captureException(error, {
  21. user: { email: req.user && req.user.email }
  22. });
  23. }
  24. return res.status(500).json({ error: "An error occurred." });
  25. };
  26. export const verify = (req, res, next) => {
  27. const errors = validationResult(req);
  28. if (!errors.isEmpty()) {
  29. const message = errors.array()[0].msg;
  30. throw new CustomError(message, 400);
  31. }
  32. return next();
  33. };
  34. export const query: Handler = (req, res, next) => {
  35. const { limit, skip, all } = req.query;
  36. const { admin } = req.user || {};
  37. req.query.limit = parseInt(limit) || 10;
  38. req.query.skip = parseInt(skip) || 0;
  39. if (req.query.limit > 50) {
  40. req.query.limit = 50;
  41. }
  42. req.query.all = admin ? all === "true" : false;
  43. next();
  44. };