Morgan Logger与Express.js只logging失败的请求

我使用Morgan和Express.js,我认为我的中间件有问题,因为Morgan只logging返回错误302(redirect)的请求,当我的中间件发现错误并redirect到错误页面时发生。

我对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'); }); 

在“开始工作”方面,下面的代码将为404做到这一点。

我没有回答关于其他响应代码的任何事情,把这些留给你。 🙂

让它工作

我改变的一个总结:

  1. 我删除了'http'var server = http.createServer(app);的依赖关系var server = http.createServer(app); 因为那些不是真的需要
  2. 我把app.listen移到了最后…所以它在所有快速configuration完成后都会侦听。
  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); 

快速抛开:

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

例如,你只能使用morgan与一个快速v.4.x应用程序,但在你的代码看起来好像他们来自一个v.3.x应用程序/示例/教程。 当我开始的时候,同样的东西正在从v.2.x移到v.3.x …所以是的。 我感到你的痛苦。