logger.js
const { createLogger, format, transports } = require('winston');
class Logger {
constructor() {
this.logger = createLogger({
transports: new transports.File({
level: 'error',
filename: 'error.log',
format: format.json(),
``
}),
});
}
logError(err) {
this.logger.error(err);
}
}
module.exports = Logger;
As you can see I am using prototype method.So that I don't have to use new method to create object. I have attached all the 3 files. Just want to know how can I use logger in user.js file without using new keyword in logger.js file.
user.js
exports.postUser = async (req, res, next) => {
try {
console.log(`name:${JSON.stringify(req.body)}`)
throw new Error('this is an error on the post');
let user = new User({
name: req.body.name,
age: parseInt(req.body.age),
city: req.body.city,
status: 'ACTIVE'
})
let savedPost = await user.save();
console.log(`savedPost':${JSON.stringify(savedPost)}`);
res.json(savedPost);
} catch (err) {
console.log(`err:${err.toString()}`)
res.status(500).json({ message: err })
here I want to call the logger .So that it can return method, err, date.
logger.prototype.logError = function() {
return (`function:controller.postUser, error:${err.toString()} -method: ${req.method}- body:${JSON.stringify(req.body)} date:${new Date(Date.now()).toUTCString()}`)
}
};
routes.js
const router = require('express').Router();
const { json } = require('body-parser');
const User = require('../models/user');
const controller = require('../controllers/user');
const middle = require('../middleware/middleware')
/*routes*/
router.get('/', controller.getUser);
router.post('/', middle.verify, controller.postUser);
router.put('/:userId', controller.updateUser)
router.delete('/:userId', controller.deleteUser);
module.exports = router