Изградете конвейер за обработка с transforms
Transform е именувана верига от стъпки. NEWTRANSFORM(name, fn, [id]) добавя стъпка към веригата name; стъпките се изпълняват в реда на регистрация и всяка получава обекта с опции $ и текущата стойност. Променете стойността с $.value = ... и извикайте $.next(), за да продължите със следващата стъпка. $.invalid(message) добавя грешка. TRANSFORM(name, value) стартира веригата и връща promise с крайната стойност; promise се отхвърля, когато стъпка е докладвала грешка. С callback вместо това TRANSFORM(name, value, function(err, value) {}). Име без никакви стъпки връща стойността непроменена.
Използвайте го за работа, която трябва да може да се разширява от няколко места, като почистването на коментар преди запис: филтър за спам, подрязване на интервали и проверка на връзки могат да живеят всеки в собствен файл и да се добавят или махат, без да пипате кода, който извиква TRANSFORM(). Незадължителният id ви позволява по-късно да премахнете стъпка с 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();
}