为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕无忌1623718 2022-12-18 16:22:05
我有记录器,我在index.js文件中使用构造器启动它。现在我需要将记录器实例传递给其他文件,我是这样做的索引.jsconst 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);,是否建议这样做?节点中有更清洁的方法吗?书籍.jsconst 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);        }}
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

尝试专门为您的记录器配置创建一个模块,然后您可以将其导入您的模块,而不是使用您的业务模块的副作用来创建记录器。


如果您需要/想要更改记录器配置,这将有所帮助 - 无需遵循一系列业务方法,您只需更新日志配置即可。


例子

记录器.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");

}


查看完整回答
反对 回复 2022-12-18
?
青春有我

TA贡献1784条经验 获得超8个赞

这是一种非常简洁的方法,但是在尝试共享更多变量或添加更多需求时可能会很尴尬。所以,你可以把所有的变量放在一个对象中,只解构你需要的变量books.js:


索引.js:


const state = {app, logger, some, other, variables};

require("./books")(state);

require("./another_file")(state);

书籍.js:


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


};


查看完整回答
反对 回复 2022-12-18
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信