首页 > 解决方案 > 如何在导入的路由文件中使用在 server.js 文件中创建的日志中间件

问题描述

我的盘子里有一个非常令人困惑的问题,我有一个 server.js,这是我的第一个应用程序入口点:

const test = require('./routers/test')

const express= require("express")

const pino = require('pino');
const expressPino = require('express-pino-logger');

const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
const expressLogger = expressPino({ logger });
const app= express();
const port= process.env.port || 4000
app.use(expressLogger);



app.use(express.json());
app.use(test);
app.listen(port, ()=>{
    logger.info(`Listening to port ${port}`);
});

如您所见,我有一个记录器(pino)并且我使用它并且它工作正常。现在我需要向这个入口点服务器文件添加一个路由文件,问题就在这里。如何在 test.js 路由文件中传递或使用我在 server.js 中创建的记录器(寻找最佳实践)?

const express = require('express');
const router = new express.Router();

router.get('test', (req, res)=>{
  console.log("THIS CONSOLE.LOG NEEDS TO BE REPLACED WITH LOGGER.INFO");  
  res.send(udsData.getDummyUrlResponse())
});

module.exports = router

标签: node.jsexpressnodejs-server

解决方案


最好将记录器提取到单独的模块中,例如logger/index.js,然后将其导入到您需要的任何地方。

./logger/index.js

const pino = require('pino');
const expressPino = require('express-pino-logger');

const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
const expressLogger = expressPino({ logger });

module.exports = { logger, expressLogger };

服务器.js

const { logger, expressLogger } = require('./logger');

app.use(expressLogger);
...
app.listen(port, ()=>{
    logger.info(`Listening to port ${port}`);
});

测试.js

const { logger } = require('./logger');

推荐阅读