我将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一样,发生了同样的事情。我感到你很痛苦。