Bygg en bearbetningspipeline med transforms
En transform är en namngiven kedja av steg. NEWTRANSFORM(name, fn, [id]) lägger till ett steg i kedjan name; stegen körs i den ordning de registrerades, och var och ett får alternativobjektet $ och det aktuella värdet. Ändra värdet med $.value = ... och anropa $.next() för att gå vidare till nästa steg. $.invalid(message) lägger till ett fel. TRANSFORM(name, value) startar kedjan och returnerar ett löfte (promise) med slutvärdet; löftet avvisas när ett steg har rapporterat ett fel. Med en callback i stället TRANSFORM(name, value, function(err, value) {}). Ett namn utan några steg returnerar värdet oförändrat.
Använd det för arbete som måste kunna byggas ut från flera ställen, som att rensa en kommentar innan den sparas: ett spamfilter, en blankstegsrensare och en länkkontroll kan var och en leva i sin egen fil och läggas till eller tas bort utan att röra koden som anropar TRANSFORM(). Det valfria id låter dig ta bort ett steg senare med 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();
}