2017-02-07 1 views
0

Ich schreibe einfache Wrap App, die man die a) Anfrage Datum & Zeit der Benutzeranforderung b) URL anfordern. c) Reaktionszeit.Wie schreibe ich eine Wrapper-Klasse in Express js

Dieses ist, wie die Express.js

var express = require('express'); 
var app = express(); 

var appget = app.get; 

(function() { 

app.get = function() { 

    var start = new Date(); 

    console.log('arguments', arguments) 

    var result = appget.apply(this, arguments); 
    var end = new Date(); 

    var duration = end.getTime() - start.getTime(); 

    console.log("duration===", duration); 
} 

})(); 

ich einfach wickeln schrieb die Wrapper-Code aber müssen wissen, wie die erf Parameter zu bekommen?

Jeder Erfahrung in diesem?

Antwort

1

Sie können dies mithilfe von Express-Middleware-Funktionen tun, die vor allen Routen platziert sind, sodass Sie diese auf alle Routen auf Ihrem Server anwenden können. In der Middleware wartet der folgende Code auf die 'finish' event to be emitted from the res object, sobald die Header und der Körper vollständig geschrieben wurden, um zurück zum Requester gesendet zu werden. Wenn Sie lieber die Antwortzeit protokollieren möchten, nachdem die Anfrage selbst geschlossen wurde, können Sie stattdessen in der Middleware unten auf das Objekt 'close' auf dem Objekt req warten.

const express = require('express'); 
const app = express(); 
const port = process.env.PORT || 1337; 

// Place this middleware before any of the route definitions/middleware 
app.use((req, res, next) => { 
    // store when request date & time came in 
    req.startTime = Date.now(); 

    // Log the original URL requested 
    console.log(req.originalUrl); 

    // Register finish event handler so when the response 
    // body and headers are sent, the total responseTime is logged 
    res.on('finish',() => { 
     let responseTime = Date.now() - req.startTime; 
     console.log(`Response Time: ${responseTime}`); 
    }); 

    return next(); 
}); 

// Place all routes/router middleware here 

app.listen(port,() => { 
    console.log(`Listening on ${port}); 
}); 
Verwandte Themen