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

jcz*_*imm 1 javascript logging node.js 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');
});
Run Code Online (Sandbox Code Playgroud)

Mat*_*tis 5

在"让它工作"方面,下面的代码将为404执行此操作.

我没有回答有关其他响应代码的任何内容,而是留给您.:)

让它工作

我改变了什么:

  1. 我删除了依赖于'http'var server = http.createServer(app);,因为这些是不是真的需要
  2. 我移动app.listen到最后...所以它在所有快速配置完成后进行监听.
  3. 我使用的.sendfile()方法而不是.redirect()因为我们只是发送状态的东西

这适用于我的系统.如果您对代码或问题有疑问,请发表评论,我会尽力帮助......但我不能在评论中承诺奇迹.:)

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);
Run Code Online (Sandbox Code Playgroud)

快点:

我的猜测是你的代码中的一些问题是基于这样一个事实,即许多表达教程/指南是为v.3.x编写的,但v.4.x中的变化足够大,以至于它不是很容易理解什么可能仍然有效,什么不可行.

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