75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
const express = require("express")
|
|
, expressLogging = require("express-logging")
|
|
, logger = require("logops")
|
|
, hostname = require('os').hostname()
|
|
, browser = require('./src/service/HeadlessService')
|
|
, port = 32101
|
|
, { NoSuchSessionError } = require("selenium-webdriver/lib/error")
|
|
, { ResourceTimeout } = require('generic-pool/lib/errors')
|
|
// , { puppeteerErrors } = require("puppeteer-core/lib/cjs/puppeteer/common/Errors");
|
|
|
|
|
|
logger.getContext = function () {
|
|
return {
|
|
// hostname: hostname,
|
|
// pid: process.pid,
|
|
// port: port,
|
|
app: 'Browser'
|
|
};
|
|
}
|
|
logger.throwError = function (msg, info) {
|
|
let error = new Error(msg)
|
|
error.info = info
|
|
throw error
|
|
}
|
|
var app = express();
|
|
app.use(express.json());
|
|
app.use(expressLogging(logger));
|
|
app.listen(port, () => {
|
|
logger.info('Browser service started');
|
|
});
|
|
|
|
|
|
// process.stdin.resume();//so the program will not close instantly
|
|
|
|
exitHandler = (options, exitCode) => {
|
|
if (options.cleanup) logger.info('cleanup')
|
|
if (exitCode || exitCode === 0) logger.info('exit code :', exitCode)
|
|
browser.close().then(() => process.exit());
|
|
}
|
|
|
|
/**
|
|
* Process shutdown events handling
|
|
*/
|
|
//do something when app is closing
|
|
process.on('exit', exitHandler.bind(null, { cleanup: true }));
|
|
|
|
//catches ctrl+c event
|
|
process.on('SIGINT', exitHandler.bind(null, { exit: true }));
|
|
|
|
process.on('SIGTERM', exitHandler.bind(null, { cleanup: true }));
|
|
|
|
// setTimeout(() => {
|
|
// process.on('SIGKILL', exitHandler.bind(null, {exit:true}));
|
|
// }, 2000)
|
|
|
|
|
|
// catches "kill pid" (for example: nodemon restart)
|
|
// process.on('SIGUSR1', exitHandler.bind(null, {exit:true}));
|
|
// process.on('SIGUSR2', exitHandler.bind(null, {exit:true}));
|
|
|
|
//catches uncaught exceptions
|
|
// process.on('uncaughtException', exitHandler.bind(null, {exit:true}));
|
|
|
|
/**
|
|
* request handler
|
|
*/
|
|
app.post('/', async (req, res, next) => {
|
|
browser.get(req.body).then(result => {
|
|
typeof result == 'string' ? res.send(result) : res.json(result)
|
|
}).catch(e => {
|
|
logger.error({ message: e.message, info: e.info }, 'Browser error')
|
|
res.status(500).send({ code: 500, message: e.message })
|
|
})
|
|
})
|