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