ForgeTotal.js 5
el

Total.js 5

Δημιουργήστε μια ροή επεξεργασίας με transforms

Total.js 5 · total5@0.0.19 transformpipeline Εκτελέστηκε με το Total.js 5

Ένα transform είναι μια ονομασμένη αλυσίδα βημάτων. Το NEWTRANSFORM(name, fn, [id]) προσθέτει ένα βήμα στην αλυσίδα name· τα βήματα τρέχουν με τη σειρά καταχώρισης και καθένα λαμβάνει το αντικείμενο επιλογών $ και την τρέχουσα τιμή. Αλλάξτε την τιμή με $.value = ... και καλέστε το $.next() για να συνεχίσετε με το επόμενο βήμα. Το $.invalid(message) προσθέτει ένα σφάλμα. Το TRANSFORM(name, value) ξεκινά την αλυσίδα και επιστρέφει ένα promise με την τελική τιμή· το promise απορρίπτεται όταν ένα βήμα έχει αναφέρει σφάλμα. Με callback αντί γι' αυτό, TRANSFORM(name, value, function(err, value) {}). Ένα όνομα χωρίς κανένα βήμα επιστρέφει την τιμή ως έχει.

Χρησιμοποιήστε το για δουλειά που πρέπει να επεκτείνεται από πολλά σημεία, όπως ο καθαρισμός ενός σχολίου πριν αποθηκευτεί: ένα φίλτρο spam, ένα εργαλείο περικοπής κενών και ένας έλεγχος συνδέσμων μπορούν να ζουν το καθένα στο δικό του αρχείο και να προστίθενται ή να αφαιρούνται χωρίς να αγγίζετε τον κώδικα που καλεί το TRANSFORM(). Το προαιρετικό id σας επιτρέπει να αφαιρέσετε ένα βήμα αργότερα με NEWTRANSFORM(name, null, id).

definitions/transforms.js
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');
controllers/comments.js
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();
}