Manual Reference Source

app/app.js

const Koa = require('koa');
const winstonKoaLogger = require('winston-koa-logger');
const logger = require('./logger');
const cors = require('kcors');
const router = require('./initializations/routes');
const config = require('./config');
const views = require('koa-views');
const koaqs = require('koa-qs');

let koa = new Koa();
koa = koaqs(koa, 'strict');

koa.use(cors());
koa.use(winstonKoaLogger(logger));
koa.use(async (context, next) => {
    try {
        await next();
    } catch (err) {
        logger.error(err.message);
        logger.debug(err);
        err.expose = true; // expose the error to the context;
        context.status = err.status || 500;
        context.body = {
            message: err.message,
            error: err.name,
            code: err.status,
        };
    }
});

koa.use(views(`${config.root}/public`));

process.on('message', (message) => {
    if (message === 'shutdown') {
        // performCleanup();
        process.exit(0);
    }
});

(async () => {
    const koa_router = await router();
    koa.use(koa_router.routes());
    koa.use(koa_router.allowedMethods());
    logger.info('Starting koalication...');
    await koa.listen(config.port);
    logger.info(`PolarisOS started on port ${config.port}`);
    logger.info(`PolarisOS environment => ${config._env}`);
    logger.info(`Grobid host:port => ${config.grobid.host}:${config.grobid.port}`);
    logger.info(`Minio host:port => ${config.minio.host}:${config.minio.port}`);
    if (process.send) {
        process.send('online');
    }
})();