Construiește un pipeline de procesare cu transforms
Un transform este un lanț denumit de pași. NEWTRANSFORM(name, fn, [id]) adaugă un pas lanțului name; pașii rulează în ordinea înregistrării, iar fiecare primește obiectul de opțiuni $ și valoarea curentă. Schimbă valoarea cu $.value = ... și apelează $.next() pentru a continua cu pasul următor. $.invalid(message) adaugă o eroare. TRANSFORM(name, value) pornește lanțul și returnează o promisiune cu valoarea finală; promisiunea este respinsă când un pas a raportat o eroare. Cu un callback în loc, TRANSFORM(name, value, function(err, value) {}). Un nume fără niciun pas returnează valoarea așa cum este.
Folosește-l pentru munca ce trebuie să poată fi extinsă din mai multe locuri, cum ar fi curățarea unui comentariu înainte de salvare: un filtru de spam, un tăietor de spații și un verificator de linkuri pot trăi fiecare în propriul fișier și pot fi adăugați sau scoși fără a atinge codul care apelează TRANSFORM(). id-ul opțional îți permite să elimini un pas mai târziu cu NEWTRANSFORM(name, null, id).
NEWTRANSFORM('comment', function($, value) {
$.value = value.trim();
$.next();
}, 'trim');
NEWTRANSFORM('comment', function($, value) {
if (/spam/i.test(value))
$.invalid('Spam is not allowed');
$.next();
}, 'spam');
NEWTRANSFORM('comment', function($, value) {
$.value = value.replace(/\s+/g, ' ');
$.next();
}, 'spaces');exports.install = function() {
ROUTE('POST /comment/ @json', comment);
ROUTE('DELETE /comment/spaces/', remove_step);
};
async function comment($) {
try {
var text = await TRANSFORM('comment', $.body.text);
$.json({ text: text });
} catch (err) {
$.json({ error: true });
}
}
function remove_step($) {
NEWTRANSFORM('comment', null, 'spaces');
$.success();
}