在node.js中使用express.loggerlogging错误

我试图通过express.logger(…)只有特定的事件login到一个文件与自定义函数,它挂起时,响应和请求不符合我设置的标准。

var express = require('express'), app = express.createServer( express.logger(function(req, res) { var status = res.statusCode, color = 32; if (status >= 500) color = 31; else if (status >= 400) color = 33; else if (status >= 300) color = 36; if (req.method==='POST' && req.originalUrl!=='/plankton') { return '\033[90m' + req.method + ' ' + req.originalUrl + ' ' + '\033[' + color + 'm' + res.statusCode + ' \033[90m' + (new Date - req._startTime) + 'ms\033[0m'; } else if (res.statusCode>=400) { return '\033[90m' + req.method + ' ' + req.originalUrl + ' ' + ' ' + req.body + ' ' + '\033[' + color + 'm' + res.statusCode + ' \033[90m' + (new Date - req._startTime) + 'ms\033[0m'; } else { // what should be inserted here? // I only want to log the above events... } }); ) 

返回“在其他人不起作用。 它挂起,我的猜测是,它不允许响应完成/发送。

也许我应该使用不同的方法来logging,但我喜欢简单的expression中间件,因为它使我不必在任何地方包含日志消息 – 或者我可以解决这个问题,并有一个特定事件的监听器。

对于我应该在其他方面有什么想法? 或build议更好的方法?

您需要了解中间件API基于asynchronouscallback,而不是同步返回值。 中间件函数的返回值将被完全忽略。 你需要遵循这个模具:

 function (req, res, next) { //look at req //do whatever logging you decide you want to do //Tell express that you are done and it can move along the middleware chain next(); }