错误"/>
无法在Node.js中使用Winston记录错误
在运行以下代码时,控制台会说logger.log不是函数,即使我正在从index.js导出函数。
index.js
const winston = require('winston');
const error = require('./middleware/error');
const logger=winston.createLogger({transports:[new winston.transports.Console(),
new winston.transports.File({filename:'logfile.log'})
]});
app.use(error);
module.exports = logger;
error.js
const winston = require('winston');
const logger = require('../index');
module.exports = function(err,req,res,next){
//Log the exception
logger.log('error',err.message);
res.status(500).send('Something failed.');
}
这是终端机所说的:
TypeError: logger.log is not a function
at module.exports (C:\Users\hp\Desktop\YouStart\nodejs-mosh\vidly\5.13- Project- Restructure the App\vidly\middleware\error.js:8:12)
at C:\Users\hp\Desktop\YouStart\nodejs-mosh\vidly\5.13- Project- Restructure the App\vidly\node_modules\express-async-errors\index.js:5:20
at Layer.handle_error (C:\Users\hp\Desktop\YouStart\nodejs-mosh\vidly\5.13- Project- Restructure the App\vidly\node_modules\express\lib\router\layer.js:71
回答如下:循环依赖永远不是一个好的模式。您正在强迫error.js
解决其出口之前 index.js
可以解决其出口-这可能会导致您的问题。
基本上应该在每种情况下都避免循环依赖。这很容易:您不需要error.js
要求index.js
,因为您可以直接导出一个函数,该函数使您可以将index.js
中需要的内容作为参数传递。它看起来像这样:
index.js
const winston = require('winston');
const logger = winston.createLogger({transports:[new winston.transports.Console(),
new winston.transports.File({filename:'logfile.log'})
]});
const error = require('./middleware/error')(logger); //pass logger to error middleware
app.use(error);
error.js
module.exports = function(logger) {
//return function configured with logger to use as middleware
return function(err,req,res,next) {
//Log the exception
logger.log('error',err.message);
res.status(500).send('Something failed.');
}
};
更多推荐
无法在Node.js中使用Winston记录错误
发布评论