【问题标题】:Morgan Logger with Express.js only logging failed requests带有 Express.js 的 Morgan Logger 仅记录失败的请求
【发布时间】:2014-08-05 16:19:24
【问题描述】:

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

【问题讨论】:

  • 为什么要重定向而不是渲染/发送相关的html错误文件? res.status(500).render('505_template'); 之类的?
  • I've tried that. :/ 你知道我的问题是什么吗? app.render() 的参数是一个 .html 文件的路径,对吧? @MattBakaitis

标签: javascript node.js logging express


【解决方案1】:

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

我没有回答任何关于其他响应代码的问题,留给你。 :)

让它发挥作用

我所做更改的摘要:

  1. 我删除了对 'http'var server = http.createServer(app); 的依赖,因为它们并不是真正需要的
  2. 我将app.listen 移到最后...所以它会在所有快速配置完成后进行侦听。
  3. 我使用了.sendfile() 方法而不是.redirect(),因为我们只是发送状态信息

这适用于我的系统。如果您对代码有任何疑问或问题,请发表评论,我会尽我所能提供帮助……但我不能保证 cmets 会出现奇迹。 :)

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 应用程序/示例/教程。当我开始时,同样的事情正在发生,因为 express 从 v.2.x 移动到 v.3.x ......所以是的。我感觉到你的痛苦。

【讨论】:

  • 感谢 Matt 的周到而完整的回答!但是,尽管错误页面现在可以工作,但这对记录器问题没有帮助。它仍然只记录错误 404 的请求(可能是其他错误)。那部分在你的系统上工作吗? @MattBakaitis
  • 对不起...中间件的顺序很重要。我已经编辑了答案。记录器必须是第一个。
  • 不要唠叨,但如果它回答了这个问题,我将不胜感激获得接受的答案。 :)
  • 糟糕,对不起!忘记了:P @MattBakaitis
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 2017-02-05
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多