【问题标题】:Problems with loggers module definition in ExpressJSExpressJS 中记录器模块定义的问题
【发布时间】:2016-03-16 18:57:00
【问题描述】:

我有我的 nodejs 项目,我想将记录器与我的 route.js 分开以获得干净的代码。

但是我遇到了下一个问题,当我尝试将记录器加载到 route.js 文件时,它会显示下一个错误:

TypeError: loggers.getTicketLogger is not a function
    at Object.<anonymous> (/home/ismael/projects/nodejs-ticketing/routes/ticket.js:3:23)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Module.require (module.js:367:17)
    at require (internal/module.js:16:19)
    at Object.<anonymous> (/home/ismael/projects/nodejs-ticketing/server.js:49:1)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:141:18)
    at node.js:933:3

我的记录器目录中有下一个代码:

loggers/ticket.js

var log4js = require('log4js');

module.exports = function(){

  getTicketLogger = function(){
    var logger = null;

    log4js.loadAppender('file');
    log4js.addAppender(log4js.appenders.file(__dirname + '/../log/ticket.log'), 'ticket-log');

    logger = log4js.getLogger('ticket-log');
    logger.setLevel('DEBUG');

    return logger;
  }

};

我的 route.js 文件,有下一个头

routes/ticket.js

var Ticket  = require('../models/ticket'),
    loggers = require('../loggers/ticket.js'),
    log     = loggers.getTicketLogger();

module.exports = function(app){
}

我做错了什么,以及如何改进代码以将记录器与 route.js 文件分开。

谢谢。

【问题讨论】:

    标签: javascript node.js express logging log4js-node


    【解决方案1】:

    loggers/ticket.js 应该返回一个具有您的 getTicketLogger 方法的对象。

    var log4js = require('log4js');
    
    module.exports = function() {
    
      var getTicketLogger = function(){
        var logger = null;
    
        log4js.loadAppender('file');
        log4js.addAppender(log4js.appenders.file(__dirname + '/../log/ticket.log'), 'ticket-log');
    
        logger = log4js.getLogger('ticket-log');
        logger.setLevel('DEBUG');
    
        return logger;
    
      }
    
      return { getTicketLogger: getTicketLogger };
    
    };
    

    然后在 routes/ticket.js

    var loggers = require('./../loggers/ticket.js')();
    var log = loggers.getTicketLogger;
    
    typeof loggers; // => object
    typeof log; // => function 
    

    【讨论】:

    • 我对这部分代码有疑问return { getTicketLogger: getTicketLogger };。如果我在这个模块中有更多的功能会发生什么?
    • IMO getTicketLogger 应该是它自己的模块,因为它不是类方法。如果您想“添加更多功能”而不是将您的 loggers/ticket.js 文件变成一堆意大利面条,只需将每个功能都作为自己的模块。
    • 如何将我的模块变成一个类来定义其中的所有记录器?
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2019-10-30
    相关资源
    最近更新 更多