app.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. const express = require('express');
  2. const path = require('path');
  3. const session = require('express-session');
  4. const flash = require('connect-flash');
  5. const rateLimit = require('express-rate-limit');
  6. const compression = require('compression');
  7. const cookieParser = require('cookie-parser');
  8. const logger = require('morgan');
  9. const http = require('http');
  10. const serveStatic = require('serve-static');
  11. const config = require('./config');
  12. const indexRouter = require('./routers/index');
  13. const messageRouter = require('./routers/message');
  14. const userRouter = require('./routers/user');
  15. const { refreshToken } = require('./common/wechat');
  16. const { initializeTokenStore } = require('./common/token');
  17. const app = express();
  18. app.locals.isLogged = false;
  19. app.locals.isAdmin = false;
  20. app.locals.message = '';
  21. app.locals.isErrorMessage = false;
  22. setTimeout(async () => {
  23. // TODO: Here we need an improvement! I have tried EventEmitter but it's not working. :(
  24. await initializeTokenStore();
  25. await refreshToken(app);
  26. setInterval(async () => refreshToken(), 100 * 60 * 1000);
  27. }, 1000);
  28. app.set('views', path.join(__dirname, 'views'));
  29. app.set('view engine', 'ejs');
  30. app.set('trust proxy', true);
  31. app.use(
  32. rateLimit({
  33. windowMs: 30 * 1000,
  34. max: 30,
  35. })
  36. );
  37. app.use(
  38. '/login',
  39. rateLimit({
  40. windowMs: 60 * 1000,
  41. max: 5,
  42. })
  43. );
  44. app.use(compression());
  45. app.use(logger('dev'));
  46. app.use(express.json());
  47. app.use(express.urlencoded({ extended: false }));
  48. app.use(cookieParser(config.cookie_secret));
  49. app.use(
  50. session({
  51. resave: true,
  52. saveUninitialized: true,
  53. secret: config.session_secret,
  54. })
  55. );
  56. app.use(flash());
  57. app.use(express.static(path.join(__dirname, 'public')));
  58. app.use(
  59. '/public',
  60. serveStatic(path.join(__dirname, `public`), {
  61. maxAge: '600000',
  62. })
  63. );
  64. app.use('*', (req, res, next) => {
  65. if (req.session.user !== undefined) {
  66. res.locals.isLogged = true;
  67. res.locals.isAdmin = req.session.user.isAdmin;
  68. }
  69. next();
  70. });
  71. app.use('/message', messageRouter);
  72. app.use('/', indexRouter);
  73. app.use('/', userRouter);
  74. const server = http.createServer(app);
  75. server.listen(config.port);
  76. module.exports = app;