将所有请求进入我的节点应用程序的最佳方法是什么?基本上我想要在请求的最开始获取当前的时间戳,然后再次在请求的最后得到差异并记录它.有关在NodeJS和Express中做最好的方法的建议?
这是我的应用程序的样例(虽然比这更复杂).
var express = require('express'),http = require('http'),app = express(); app.get('/',function (req,res,next) { res.send(200,'hi'); }); app.get('/about',function(req,next) { res.send(200,'something else'); }); var server = http.createServer(app); server.listen(9000); console.log("Express server listening...");
我想要时间所有的请求.所以我想要和/和/和任何其他端点我可能添加.
解决方法
这可能是诀窍:
http://www.senchalabs.org/connect/responseTime.html
app.use(express.responseTime());
或者做这样的事情:
app.use(function(req,next) { req.start = Date.Now(); next(); }); app.get(...); app.get(...); app.use(function(req,res) { var time = Date.Now() - req.start; });
这要求所有的路由都调用next().
或者也许这个(与responseTime中间件相同的东西,但不设置头):
app.use(function(req,next) { var start = Date.Now(); res.on('header',function() { var duration = Date.Now() - start; // log duration }); next(); });
头发发送后,您可以聆听res的“header”事件,而不是听取“完成”事件,具体取决于您要测量的内容.