txq
Version:
TXQ: Bitcoin Transaction Storage Queue Service
102 lines (91 loc) • 2.35 kB
text/typescript
import { Request, Response, NextFunction, Router } from 'express';
import { Container } from 'typedi';
import { Logger } from 'winston';
const handle404Error = (router: Router) => {
router.use((req: Request, res: Response) => {
const logger: Logger = Container.get('logger');
logger.error('404', {
method: req.method,
url: req.originalUrl,
query: req.query,
ip: req.ip,
});
res.status(404);
res.api.errors.push({
field: 'endpoint',
message: 'API endpoint does not exist',
});
res.api.status = 404;
res.json(res.api);
});
};
const handleServerError = (router: Router) => {
router.use((err: Error, req: Request, res: Response, next: NextFunction) => {
if (!err) {
return next();
}
const logger: Logger = Container.get('logger');
logger.error('500', {
method: req.method,
url: req.originalUrl,
query: req.query,
ip: req.ip,
error: err,
stack: err.stack,
});
res.api.errors.push({
field: 'endpoint',
message: err.message ? err.message : err,
});
res.api.status = 500;
res.status(res.api.status);
res.json(res.api);
});
};
export const handleServerStop = (signal: string, server: any) => {
const logger: Logger = Container.get('logger');
return () => {
console.log(`${signal} received! shutting down`);
logger.info(`${signal}`, {
method: '',
url: '',
query: '',
ip: '',
error: `${signal} received`,
stack: `shutting down`,
});
server.close(() => {
process.exit(0);
});
};
};
export const handleServerExit = (signal: string, server: any) => {
const logger: Logger = Container.get('logger');
return () => {
console.log(`${signal} received! shutting down`);
logger.info(`${signal}`, {
method: '',
url: '',
query: '',
ip: '',
error: `${signal} received`,
stack: `shutting down`,
});
server.close(() => {
process.exit(0);
});
};
};
export const handleExceptions = (error: any) => {
const logger: Logger = Container.get('logger');
logger.info(`Exception`, {
method: '',
url: '',
query: '',
ip: '',
error: error,
stack: error.stack,
});
process.exit(1);
};
export default [handle404Error, handleServerError];