ForgeTotal.js 5
pl

Total.js 5

Zbieraj błędy za pomocą ErrorBuilder, rejestruj je przez ERROR() i prowadź ślad audytu przez AUDIT()

Total.js 5 · total5@0.0.19 errorsloggingaudit Uruchomiono z Total.js 5
  • ErrorBuilder zbiera błędy. push(message, [path], [index]) dodaje jeden (path to pole, do którego należy), push(404) dodaje tekst kodu statusu i ustawia status odpowiedzi, length je liczy, output() zwraca je jako tablicę { error, path, index }, a toString() łączy komunikaty. $.invalid(builder) odpowiada tą tablicą i statusem buildera (400, chyba że dodano kod statusu).
  • SUCCESS(value) zwraca obiekt udanej operacji: { success: true, value: value }.
  • ERROR(name) zwraca callback dla API z function(err): gdy otrzyma błąd, zapisuje go pod nazwą name, a gdy błąd jest pusty, nic nie robi. ERROR() to ten sam callback bez nazwy. Zapisany błąd jest wypisywany w konsoli, liczony w F.stats.error, a ostatnie dziesięć jest przechowywane w F.errors jako { error, name, date }.
  • AUDIT($, message, type) dopisuje jedną linię JSON do logs/audit.log z informacją, kto i gdzie (ip, ua, url oraz użytkownik, jeśli jest), message, type, params, query i model żądania w data, nazwę aplikacji w app i czas w dtcreated. AUDIT('name', $, message, type) zapisuje zamiast tego do logs/name.log.
controllers/reports.js
exports.install = function() {
	ROUTE('GET /builder/', builder);
	ROUTE('GET /builder404/', builder404);
	ROUTE('GET /success/', success);
	ROUTE('GET /error/', error);
	ROUTE('GET /audit/', audit);
	ROUTE('GET /audit-read/{name}/', auditread);
};

function builder($) {
	const errors = new ErrorBuilder();
	errors.push('Name is required', 'name');
	errors.push('Age is too low', 'age', 2);
	$.invalid(errors);
}

function builder404($) {
	const errors = new ErrorBuilder();
	errors.push(404);
	$.invalid(errors);
}

function success($) {
	$.json(SUCCESS('saved'));
}

function error($) {
	const before = F.stats.error;
	ERROR('mypart')('Something broke');
	ERROR('mypart')(null);
	ERROR()('Without a name');
	$.json({ counted: F.stats.error - before, last: F.errors.slice(-2).map(n => ({ error: n.error, name: n.name || null, date: n.date instanceof Date || typeof n.date === 'string' })) });
}

function audit($) {
	AUDIT($, 'Opened the report', 'info');
	AUDIT('security', $, 'Checked the access');
	$.json({ ok: true });
}

function auditread($) {
	setTimeout(function() {
		const lines = require('fs').readFileSync(PATH.logs($.params.name + '.log'), 'utf8').trim().split('\n');
		$.json(lines.map(n => JSON.parse(n)));
	}, 300);
}