#node.js #express #middleware #audit #audit-logging
#node.js #экспресс #промежуточное программное обеспечение #аудит #аудит-ведение журнала
Вопрос:
Я ищу универсальный способ аудита промежуточного программного обеспечения Express, которое я написал для некоторых API.
Я придумал несколько способов сделать это, но ни один из них не кажется мне настолько эффективным. На данный момент я хочу только войти в консоль или файл журнала, но позже я буду смотреть на хранилище данных.
- Для этого я могу довольно легко использовать библиотеку «протоколирования», такую как bunyan, в маршрутизации API. Но это означает, что я должен вызывать функцию ведения журнала везде, где я хочу провести аудит.
-
Используйте центральную функцию, такую как приведенная в фрагменте, для ведения журнала. Это хороший способ регистрации запроса / ответа API, но не помогает, когда дело доходит до аудита важной информации, такой как аудит идентификатора пользователя при регистрации пользователя. Или аудит адреса электронной почты при входе пользователя в систему.
function auditUserAction(apiFunction) { function jsonWrapper(funcToWrap, userAction) { return function() { userAction.jsonResponse = arguments[0]; return funcToWrap.apply(this, arguments); } } return function() { req = arguments[0]; res = arguments[1]; // Overriding json method so we can capture the json response res.json = jsonWrapper(res.json, userAction); userAction.url = req.url; userAction.userId = req.headers.user_id; userAction.referer = req.headers.referer; userAction.browserAgent = req.headers['user-agent']; result = apiFunction.apply(this, arguments); userAction.responseStatusCode = res.statusCode; userAction.responseBody = res.body; logger.info("Action", userAction); return resu< } } .......... router = require('express').Router(); router.post('/users', auditUserAction(createUser));
Есть ли лучшая стратегия, чем эта? Я искал в Интернете, но не смог найти ни одного способа сделать это элегантно.