最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

无法在Node.js中使用Winston记录错误

网站源码admin16浏览0评论

无法在Node.js中使用Winston记录错误

无法在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.');
    }
};
发布评论

评论列表(0)

  1. 暂无评论