从其他js模块访问记录器

时间:2019-06-07 16:51:47

标签: javascript node.js

我只是从nodejs开始。

我正在实例化server.js中的记录器(Pino),这是入口点。我只想创建该记录器的一个实例,并在其他模块中使用它。

'use strict';

const express = require('express');
const pino = require('pino');
const log = pino({ level: process.env.LOG_LEVEL || 'info' });

const ping = require('./routes/ping'); //new

const app = express();
app.use('/api/ping', ping);

const port = 3000;

app.listen(port, () => {
  console.log(`API server started on ${port}... ^C to end`);
});

module.exports = { app, log }; //edited

那么在ping.js中,我如何获得登录services.js的权限?

const express = require('express');
const router = express.Router();
const { log }  = require('../server'); //edited

router.get('/', async function(req, res) {
  log.info('someone pinged');
  res.sendStatus(200);
});

module.exports = router;

根据建议进行了编辑。

2 个答案:

答案 0 :(得分:0)

'use strict';

const path = require('path');
const express = require('express');
const ping = require('./routes/ping');

const pino = require('pino');
const log = pino({ level: process.env.LOG_LEVEL || 'info' });

var app = module.exports = express();

app
  .use('/api/ping', ping);

const port = config.SERVER_PORT || 3000;

app.listen(port, () => {
  console.log(`API server started on ${port}... ^C to end`);
});

module.exports = {app,pino}

现在您可以在任何地方导入相同的pino实例。

const log = require('./server.js').pino

答案 1 :(得分:0)

您可以将记录器作为属性附加到app对象或app.locals上。然后,可以通过req.app.loggerreq.app.locals.logger或中间件和路由处理程序中的任何内容来访问它的引用。