| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- const express = require('express');
- const path = require('path');
- const session = require('express-session');
- const flash = require('connect-flash');
- const rateLimit = require('express-rate-limit');
- const compression = require('compression');
- const cookieParser = require('cookie-parser');
- const logger = require('morgan');
- const http = require('http');
- const serveStatic = require('serve-static');
- const config = require('./config');
- const indexRouter = require('./routers/index');
- const messageRouter = require('./routers/message');
- const userRouter = require('./routers/user');
- const { refreshToken } = require('./common/wechat');
- const { initializeTokenStore } = require('./common/token');
- const app = express();
- app.locals.isLogged = false;
- app.locals.isAdmin = false;
- app.locals.message = '';
- app.locals.isErrorMessage = false;
- setTimeout(async () => {
- // TODO: Here we need an improvement! I have tried EventEmitter but it's not working. :(
- await initializeTokenStore();
- await refreshToken(app);
- setInterval(async () => refreshToken(), 100 * 60 * 1000);
- }, 1000);
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'ejs');
- app.set('trust proxy', true);
- app.use(
- rateLimit({
- windowMs: 30 * 1000,
- max: 30,
- })
- );
- app.use(
- '/login',
- rateLimit({
- windowMs: 60 * 1000,
- max: 5,
- })
- );
- app.use(compression());
- app.use(logger('dev'));
- app.use(express.json());
- app.use(express.urlencoded({ extended: false }));
- app.use(cookieParser(config.cookie_secret));
- app.use(
- session({
- resave: true,
- saveUninitialized: true,
- secret: config.session_secret,
- })
- );
- app.use(flash());
- app.use(express.static(path.join(__dirname, 'public')));
- app.use(
- '/public',
- serveStatic(path.join(__dirname, `public`), {
- maxAge: '600000',
- })
- );
- app.use('*', (req, res, next) => {
- if (req.session.user !== undefined) {
- res.locals.isLogged = true;
- res.locals.isAdmin = req.session.user.isAdmin;
- }
- next();
- });
- app.use('/message', messageRouter);
- app.use('/', indexRouter);
- app.use('/', userRouter);
- const server = http.createServer(app);
- server.listen(config.port);
- module.exports = app;
|