Nodejs передавать экземпляр журнала между модулями - PullRequest
1 голос
/ 03 августа 2020

У меня регистратор, который я запускаю с помощью ограничителя в файле index.js. Теперь мне нужно передать экземпляр регистратора в другие файлы, и я делаю это так:

index. 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);
        }


}

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Попробуйте создать модуль специально для конфигурации вашего регистратора, затем вы можете импортировать его в свои модули вместо использования побочного эффекта вашего бизнес-модуля для создания регистратора.

Это поможет, если вам когда-нибудь понадобится / хотите изменить конфигурацию вашего регистратора - вместо того, чтобы следовать цепочке бизнес-методов, вы можете просто обновить конфигурацию журнала.

Пример

регистратор. 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;

бизнес-лог c. js

'use strict';

var log = require('./logger');
var stuff = require('./stuff');

const do_stuff = function (thing) {
    // do stuff here
    log("INFO", "Did stuff");
}
1 голос
/ 03 августа 2020

Это довольно простой способ сделать это, однако он может быть неудобным при попытке совместного использования большего количества переменных или добавлении дополнительных требований. Итак, вы можете поместить все переменные в объект и деструктурировать только те переменные, которые вам нужны в books.js:

index. js:

const state = {app, logger, some, other, variables};
require("./books")(state);
require("./another_file")(state);

книги. js:

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

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...