路由上的日志请求方法

时间:2018-10-12 08:55:49

标签: node.js express

对于我的NodeJs项目,我使用Express路由器。我创建了一个 router.js

module.exports = (app) => {
    app.use('/', require('./routes/home.js'));
    app.use('/contact', require('./routes/contact.js'));
    app.use('/imprint', require('./routes/imprint.js'));
};

,在我的 app.js 中,我需要此文件require('./server/router.js')(app);。呼叫路线时,例如/contact,我需要 contact.js

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

router.get('/', (req, res) => {
    res.render('contact', { // render contact.hbs
        title: 'Contact' // pass in some template variables
    });
});

module.exports = router;

router.get内,我可以使用console.log(req.method)来记录HTTP方法。目前,我将不得不在所有路由器文件中记录该日志。可以将代码放在一个地方吗?

module.exports = (app) => {
    console.log(req.method); // Log the request method for all routes

    app.use('/', require('./routes/home.js'));
    app.use('/contact', require('./routes/contact.js'));
    app.use('/imprint', require('./routes/imprint.js'));
};

请提供一个无需安装中间件的解决方案。我知道那里有很多记录器。

2 个答案:

答案 0 :(得分:4)

您可以在下面的HTTP请求记录器中间件中使用node.js,而不必在代码中添加任何内容。只需在您的主应用程序中对其进行配置,即可完成所有工作。

https://www.npmjs.com/package/morgan

答案 1 :(得分:1)

如果要避免安装中间件并使用console.log,则可以按以下方式更改代码:

module.exports = (app) => {
    app.use((req, res, next) => {
       console.log('Request Type:', req.method);
       console.log('Time:', Date.now());
       next();
    })

    app.use('/', require('./routes/home.js'));
    app.use('/contact', require('./routes/contact.js'));
    app.use('/imprint', require('./routes/imprint.js'));
};

如果您没有指定路由,但是有next回调,那么它将首先执行您的日志记录代码,然后执行匹配的路由(如果有)。您可以在ExpressJS API documentation的“使用中间件”部分中找到更多详细信息。