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 }) }) })