带有Express.js的Morgan Logger仅记录失败的请求

时间:2014-06-15 19:57:00

标签: javascript node.js logging express

我正在使用Morgan和Express.js,我认为我的中间件有问题,因为Morgan只记录请求返回错误302(重定向),这是在我的中间件捕获错误并重定向到其错误页面时发生的

我对Express.js来说是一个全新的中间件爵士乐,所以我非常感谢任何帮助。谢谢!

var http = require('http')
    , express = require('express')
    , app = express()
    , logger = require('morgan');

app.use(express.static(__dirname + '/public'));
app.use(logger());

var server = http.createServer(app);
server.listen(8888);

// Handle 404
app.use(function(req, res) {
    res.status(404).redirect('/error/404.html');
});

// Handle 500
app.use(function(error, req, res, next) {
    res.status(500).redirect('/error/500.html');
});

1 个答案:

答案 0 :(得分:5)

就“让它工作”而言,下面的代码将为404执行此操作。

我没有回答有关其他回复代码的任何问题,请将此留给您。 :)

开始工作

我改变的摘要:

  1. 我删除了对'http'var server = http.createServer(app);的依赖,因为那些并不是真的需要
  2. 我将app.listen移到了最后...所以它在所有快速配置完成后进行监听。
  3. 我使用.sendfile()方法代替.redirect(),因为我们只是发送状态内容
  4. 这适用于我的系统。如果您对代码或问题有疑问,请发表评论,我会尽力帮助......但我不能在评论中承诺奇迹。 :)

    var express = require('express');
    var app = express();
    var logger = require('morgan');
    
    // edited, moving `app.use(logger());` first so it can log everything...    
    app.use(logger());
    app.use(express.static(__dirname + '/public'));
    
    
    // Handle 404
    app.use(function(req, res, next) {
        res.status(404).sendfile('./error/404.html');
    });
    
    app.listen(8888);
    

    快速搁置:

    我的猜测是你的代码中的一些问题是基于这样的事实,即许多表达教程/指南都是针对v.3.x编写的,但v.4.x中的更改足够大,以至于它不是超级的 - 很容易弄清楚什么可能仍然有用,什么不可用。

    例如,您只使用morgan使用快速v.4.x应用,但代码中的一些内容看起来像来自v.3.x应用/示例/教程。当我开始时,同样的事情正在发生,因为快递从v.2.x转移到v.3.x ...所以是的。我感觉到你的痛苦。