82 lines
2.1 KiB
TypeScript
82 lines
2.1 KiB
TypeScript
import * as createError from 'http-errors';
|
|
import * as express from 'express';
|
|
import {NextFunction, Request, Response} from 'express';
|
|
import * as path from 'path';
|
|
import * as sassMiddleware from 'node-sass-middleware';
|
|
import * as compression from 'compression';
|
|
import indexRouter from './routes';
|
|
import {AuthProxy, AutoReloader, DefaultConfig, HttpLogger, Polyfill, PermManager} from 'pkg-express-utils';
|
|
|
|
export const app = express();
|
|
|
|
// Permissions
|
|
PermManager
|
|
.grant('user')
|
|
.execute('read').on('userinfo')
|
|
.grant('coe_bs')
|
|
.extend('user')
|
|
.execute('write').on('userinfo');
|
|
|
|
// view engine setup
|
|
app.set('views', path.join(__dirname, '../views'));
|
|
app.set('view engine', 'pug');
|
|
app.use((req, res, next) => {
|
|
res.locals.DefaultConfig = DefaultConfig;
|
|
next();
|
|
});
|
|
|
|
// http logger
|
|
app.use(HttpLogger);
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({extended: false}));
|
|
|
|
// compression
|
|
app.use(compression());
|
|
|
|
const router = express.Router();
|
|
|
|
// auth proxy middleware
|
|
router.use(AuthProxy.router);
|
|
// auto reloader (when running in debug mode)
|
|
router.use(AutoReloader.getRouter({
|
|
frontendDirs: './public',
|
|
}));
|
|
|
|
// session
|
|
//router.use(Session.getRouter());
|
|
|
|
// static config
|
|
router.use('/js/polyfill.js', Polyfill.getRouter('./public/js/bundle.js'));
|
|
router.use(sassMiddleware({
|
|
src: path.join(__dirname, '../../public'),
|
|
dest: path.join(__dirname, '../../public'),
|
|
indentedSyntax: true, // true = .sass and false = .scss
|
|
sourceMap: true,
|
|
}));
|
|
router.use(express.static(path.join(__dirname, '../../public')));
|
|
|
|
router.use(indexRouter);
|
|
app.use(DefaultConfig.BASE_PATH, router);
|
|
|
|
// catch 404 and forward to error handler
|
|
app.use((req, res, next) => {
|
|
next(createError(404));
|
|
});
|
|
|
|
// error handler
|
|
app.use((err: Error&{status?: number}, req: Request, res: Response, next: NextFunction) => {
|
|
if (res.headersSent) {
|
|
return next(err);
|
|
}
|
|
// set locals, only providing error in development
|
|
res.locals.message = err.message;
|
|
res.locals.error = !DefaultConfig.isProduction ? err : {};
|
|
|
|
// render the error page
|
|
res.status(err.status || 500);
|
|
res.render('error');
|
|
return undefined;
|
|
});
|
|
|
|
|