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

最佳答案

在“使其正常工作”方面,以下代码将针对404进行此操作。

关于其他响应代码,我没有回答任何问题,而是交给您。 :)

使它工作

我所做的更改的摘要:


我删除了对'http'var server = http.createServer(app);的依赖,因为实际上并不需要它们
我将app.listen移到末尾...所以它会在所有快速配置完成后进行监听。
我使用了.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应用程序/示例/教程。当我开始时,与Express从v.2.x迁移到v.3.x一样,发生了同样的事情。我感到你很痛苦。

09-07 04:53