Merge pull request #555 from directus/response-hook

Add response hook
This commit is contained in:
Rijk van Zanten
2020-10-06 16:22:02 -04:00
committed by GitHub
3 changed files with 59 additions and 19 deletions

View File

@@ -14,6 +14,7 @@ import rateLimiter from './middleware/rate-limiter';
import cache from './middleware/cache';
import extractToken from './middleware/extract-token';
import authenticate from './middleware/authenticate';
import responseHook from './middleware/response-hook';
import activityRouter from './controllers/activity';
import assetsRouter from './controllers/assets';
import authRouter from './controllers/auth';
@@ -53,6 +54,7 @@ app.disable('x-powered-by');
app.set('trust proxy', true);
app.use(expressLogger({ logger }));
app.use(responseHook);
app.use((req, res, next) => {
bodyParser.json()(req, res, (err) => {

View File

@@ -0,0 +1,38 @@
import { RequestHandler } from 'express';
import asyncHandler from 'express-async-handler';
import emitter from '../emitter';
import logger from '../logger';
const responseHook: RequestHandler = asyncHandler((req, res, next) => {
res.on('close', afterResponse);
const startTime = process.hrtime();
return next();
function afterResponse() {
res.removeListener('close', afterResponse);
const info = {
request: {
method: req.method,
uri: req.path,
url: req.protocol + '://' + req.get('host') + req.originalUrl,
size: req.socket.bytesRead,
query: req.query,
headers: req.headers,
},
response: {
status: res.statusCode,
size: (res as any)['_contentLength'] || res.getHeader('content-length'),
headers: res.getHeaders(),
},
ip: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
duration: (process.hrtime(startTime)[1] / 1000000).toFixed(),
};
emitter.emitAsync('response', info).catch((err) => logger.warn(err));
}
});
export default responseHook;