Files
backend-Eprocurement/middlewares/logging.js
2025-12-05 06:21:42 +07:00

97 lines
3.2 KiB
JavaScript

const colllogging = require('../models/colllogging');
// const getLoggerForStatusCode = (statusCode) => {
// // console.log(statusCode);
// if (statusCode >= 500) {
// return console.error.bind(console)
// }
// if (statusCode >= 400) {
// return console.warn.bind(console)
// }
// return console.log.bind(console)
// }
module.exports = (req, res, next) => {
// console.info(`${req.method} ${req.originalUrl}`)
const cleanup = () => {
res.removeListener('finish', logFn)
res.removeListener('close', abortFn)
res.removeListener('error', errorFn)
}
const logFn = () => {
try {
cleanup()
// console.log(req['headers']['content-type'])
let nz_date_string = new Date().toLocaleString("en-US", { timeZone: "Asia/Jakarta" });
// console.log(nz_date_string);
// const secretkey = req.body.secretkey
const iprequest = req.headers['x-forwarded-for']
const timestamp = nz_date_string//new Date().toISOString()
const useragent = req.headers['user-agent']
const contenttype = req.headers['content-type']==undefined ? "none" : req.headers['content-type']
const originalurl = req.originalUrl
const requestbody = JSON.stringify(req.body)
const requestheader = JSON.stringify(req.headers)
const statuscode = res.statusCode
const response = res.get('responseData')
var savelogging = new colllogging(
{
// secretkey : secretkey,
iprequest : iprequest,
timestamp : timestamp,
useragent : useragent,
contenttype : contenttype,
originalurl : originalurl,
requestbody : requestbody,
requestheader : requestheader,
statuscode : statuscode,
response : response
}
);
savelogging.save(function(err,data){
if(err)
{
const error = new Error("Logging failed");
error.statusCode = 401;
error.message = err.toString();
throw error;
}
else{
//console.log(data);
}
});
} catch (err) {
const error = new Error("Logging failed");
error.statusCode = 401;
error.message = err.toString();
throw error;
}
}
const abortFn = () => {
cleanup()
console.warn('Request aborted by the client')
}
const errorFn = err => {
cleanup()
console.error(`Request pipeline error: ${err}`)
}
// successful pipeline (regardless of its response)
res.on('finish', logFn) // successful pipeline (regardless of its response)
res.on('close', abortFn) // aborted pipeline
res.on('error', errorFn) // pipeline internal error
next()
}