用模块构造node.js App

尼科

我想用模块构建Node.js应用程序。例如,我使用bunyan作为记录器。

我有一个文件main.js

//configs
var logfile = __dirname + '/log.txt';

//my own modules
var log = require("./modules/log"),
    init = require("./modules/init");

因此,我正在将日志文件+路径传递到日志模块。

我的log.js

var bunyan    = require('bunyan');

function init(logfile){

var log = bunyan.createLogger({
  name: "myapp",
  streams: [{
    path: logfile
  }]
});
  return log;
};

module.exports.init = init;

而目前仅捕获未捕获异常的init.js:

var logging = require('./log'),
    log = logging.init;

process.on('uncaughtException', function(err) {

  //print to console
  console.error((new Date).toUTCString() + ' uncaughtException:', err.message);
  console.error(err.stack);

  //print to bunyan logger
  log.error((new Date).toUTCString() + ' uncaughtException:', err.message);
  log.error(err.stack);

});

我现在的主要问题是我想在每个模块中使用记录器。但是当我这样做

var logging = require('./log'),
    log = logging.init;

在每个文件中,那么它将每次创建记录器。我只想初始化一次,然后在每个模块中使用它。

我考虑过删除记录器的功能:

log.js

var bunyan    = require('bunyan');
var log = bunyan.createLogger({
  name: "juntidos",
  streams: [{
    path: logfile
  }]
});

当我加载模块时,它只会被调用一次。但是,如何传递文件名参数呢?

内特

因此,我正在将日志文件+路径传递到日志模块。

我看到你定义logfile你以前require的日志模块,但不同的JavaScript在浏览器中,Node.js的变量不是由默认的全局。

您的任何模块都不可见您的日志文件路径。


如果要(1)初始化记录器,以便可以在整个应用程序中使用它,并且(2)传递日志文件名,而不是将其硬编码到log.js模块中,则一种方法是:

// log.js

var bunyan = require('bunyan');

module.exports = {
    logger: undefined,

    init: function(logfile) {
        this.logger = bunyan.createLogger({
            name: 'myapp',
            streams: [{
                path: logfile    
            }]
        });
    }
};

现在,您只需要确保init()调用一次即可,并且确保加载任何其他模块之前发生这种情况那应该很容易:

// main.js

var logfile = __dirname + '/log.txt';

var log = require('./modules/log.js').init(logfile),    // init() called here
    anotherModule = require('./modules/anotherModule.js')
    someOtherModule = require('./modules/someOtherModule.js');

在子模块中,执行以下操作:

// someOtherModule.js

var log = require('./log.js');
log.logger.warn('someOtherModule was loaded');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用模块构造node.js App

来自分类Dev

Node.js-使app.js中的数组在模块中可用

来自分类Dev

在node.js中,如何从app.js中的另一个模块中的模块访问函数?

来自分类Dev

无法使用chrome-cookies-secure模块解析Node.js App中的Promise

来自分类Dev

在Electronic App中运行时加载Node.js模块

来自分类Dev

Node js app.configure不是函数

来自分类Dev

设置Node.js App目录

来自分类Dev

Node JS App更好的设计和分离

来自分类Dev

Node.js退出Clean Express Starter App.js

来自分类Dev

Node js 逐行模块

来自分类Dev

找不到模块:无法在React App中解析'/root/project/node_modules/eslint-loader/index.js

来自分类Dev

找不到模块'/app/dist/bin/www.js'

来自分类Dev

无法从App.js解析(模块)-React Native

来自分类Dev

找不到模块'/usr/src/app/server.js'

来自分类Dev

无法从App.js解析模块-React Native

来自分类Dev

使用npm start找不到APP.JS模块

来自分类Dev

使用npm start找不到APP.JS模块

来自分类Dev

Ember.js-在模块中获取App实例

来自分类Dev

Node-App-Architecture:Node.js中表达的地方

来自分类Dev

Supervisor node .js "Program node app exited with code 0" error

来自分类Dev

Expose garbage collector in a Node.js app with StrongLoop support

来自分类Dev

node.js App Engine中的cron支持

来自分类Dev

Google App Engine如何控制实例Node.js的数量

来自分类Dev

Node.js Express在app.post()中执行

来自分类Dev

App Engine Flex Node.js worker_connections错误

来自分类Dev

在node.js / express中需要http.createServer(app)

来自分类Dev

自动刷新Node.js中的'app.get()'

来自分类Dev

app.get是未定义的(node.js)

来自分类Dev

Azure 上的路由问题 /w node.js vue app

Related 相关文章

热门标签

归档