Zostavte spracovateľský reťazec pomocou transforms
Transform je pomenovaná reťaz krokov. NEWTRANSFORM(name, fn, [id]) pridá krok do reťaze name; kroky sa vykonávajú v poradí registrácie a každý dostane objekt možností $ a aktuálnu hodnotu. Hodnotu zmeníte cez $.value = ... a zavolaním $.next() pokračujete ďalším krokom. $.invalid(message) pridá chybu. TRANSFORM(name, value) reťaz spustí a vráti promise s konečnou hodnotou; promise sa zamietne, keď niektorý krok ohlásil chybu. S callbackom namiesto toho TRANSFORM(name, value, function(err, value) {}). Názov bez akéhokoľvek kroku vráti hodnotu bez zmeny.
Použite ho pre prácu, ktorú treba môcť rozširovať z viacerých miest, napríklad čistenie komentára pred uložením: filter spamu, orezávač medzier a kontrola odkazov môžu žiť každý vo vlastnom súbore a dať sa pridať alebo odobrať bez zásahu do kódu, ktorý volá TRANSFORM(). Voliteľné id umožňuje krok neskôr odstrániť cez 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();
}