Nodejs 在模块之间传递日志实例

我有记录器,我在index.js文件中使用构造器启动它。现在我需要将记录器实例传递给其他文件,我是这样做的


索引.js


const books = require(“./books”);


books(app, logger);

 

logger = initLogger({

  level: levels.error,

  label: “app”,

  version: "0.0.1",

});



app.listen(port, () => logger.info(`listening on port ${port}`));

在books.js文件内部我像下面这样使用它,从index.js文件中获取记录器并在文件内部使用它 books.js,还将它传递给另一个具有函数的文件 isbn.get(books, logger);,是否建议这样做?节点中有更清洁的方法吗?


书籍.js


const isbn = require(“./isbn”);

module.exports = async function (app, logger) {


  try {

    Let books = await getBooks();

    logger.info(“get “books process has started”);

  } catch (err) {

    logger.error("Failed to fetch books", err);

    return;

  }



// this function is from the file “isbn” and I should pass the logger to it also

        try {


          let url = await isbn.get(books, logger);

        } catch (e) {

          res.send(e.message);

        }



}


慕无忌1623718
浏览 86回答 2
2回答

MMTTMM

尝试专门为您的记录器配置创建一个模块,然后您可以将其导入您的模块,而不是使用您的业务模块的副作用来创建记录器。如果您需要/想要更改记录器配置,这将有所帮助 - 无需遵循一系列业务方法,您只需更新日志配置即可。例子记录器.js'use strict';// Any setup you need can be done here.// e.g. load log libraries, templates etc.const log = function(level, message) {    return console.log(level + ": " + message);};module.exports = log;业务逻辑.js'use strict';var log = require('./logger');var stuff = require('./stuff');const do_stuff = function (thing) {    // do stuff here    log("INFO", "Did stuff");}

青春有我

这是一种非常简洁的方法,但是在尝试共享更多变量或添加更多需求时可能会很尴尬。所以,你可以把所有的变量放在一个对象中,只解构你需要的变量books.js:索引.js:const state = {app, logger, some, other, variables};require("./books")(state);require("./another_file")(state);书籍.js:module.exports = async function ({app, logger}) {};
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript