Από το Express στο Total.js 5
Το Total.js δεν είναι Express με άλλο όνομα. Οι μεγαλύτερες διαφορές: ένας χειριστής λαμβάνει ένα μόνο αντικείμενο, το $, αντί για (req, res)· το σώμα αναλύεται από το framework ανάλογα με τον τύπο περιεχομένου του· δεν εγκαθιστάτε πακέτα για cookies, μεταφορτώσεις, επικύρωση, συνεδρίες, CORS, cron ή email, επειδή είναι μέρος του framework· και τα αρχεία του έργου σας φορτώνονται από φακέλους αντί να εισάγονται (δείτε τη σελίδα για τη δομή του έργου).
Οι πίνακες συνδυάζουν κοινά πρότυπα Express με τα ισοδύναμα Total.js τους 5.
| Εργασία | Express | Total.js 5 |
|---|---|---|
| Εκκίνηση του διακομιστή | app.listen(3000) | Total.run({ port: 3000 }) |
| Μια διαδρομή | app.get('/users', fn) | ROUTE('GET /users/', fn) (γράψτε την τελική κάθετο) |
| Παράμετρος διαδρομής | app.get('/users/:id', fn) και req.params.id | ROUTE('GET /users/{id}/', fn) και $.params.id |
| Συμβολοσειρά ερωτήματος | req.query.page | $.query.page |
| Σώμα JSON | app.use(express.json()) και req.body | $.body, αναλύεται ανάλογα με τον τύπο περιεχομένου |
| Κεφαλίδες αιτήματος | req.headers['x-token'] | $.headers['x-token'] |
| Αποστολή JSON | res.json(object) | $.json(object) |
| Αποστολή κειμένου ή HTML | res.send('text') | $.plain('text') ή $.html('<p>..</p>') |
| Κωδικός κατάστασης | res.status(404).json(...) | $.invalid(404) για σφάλμα, ή $.response.status = 201 πριν απαντήσετε |
| Κεφαλίδα απάντησης | res.set('x-a', 'b') | $.response.headers['x-a'] = 'b' |
| Ανακατεύθυνση | res.redirect('/x') | $.redirect('/x') |
| Cookies | cookie-parser, res.cookie(...) | $.cookie('name') για ανάγνωση, $.cookie('name', value, '1 day') για εγγραφή |
| Middleware σε μια διαδρομή | app.get('/a', mw, fn) | MIDDLEWARE('mw', ($, next) => ...) και ROUTE('GET /a/ #mw', fn) |
| Στατικά αρχεία | app.use(express.static('public')) | Βάλτε τα αρχεία στο public/: χωρίς κώδικα |
| Λήψη αρχείου | res.download(path, name) | $.file(path, name) |
| Πρότυπο | res.render('page', model) | $.view('page', model) |
| Επικύρωση εισόδου | express-validator ή zod | input: '*email:Email, age:Number' σε μια ενέργεια |
| Σελίδα σφάλματος | ένα middleware χειρισμού σφαλμάτων | ROUTE('#404', fn) και ROUTE('#401', fn) |
| Πιστοποίηση | passport ή express-session | AUTH(fn) και ROUTE('+GET /private/', fn) |
| Μεταφορτώσεις | multer | η σημαία @upload και $.files |
| CORS | cors | CORS('https://example.com') |
| Κλήση άλλου API | axios ή fetch | REQUEST() και RESTBuilder |
| Προγραμματισμένες εργασίες | node-cron | CRON('0 9 * * 1-5', fn) |
| Αποστολή email | nodemailer | MAIL() και HTMLMAIL() με mail_smtp στο config |
| WebSocket | ws ή socket.io | ROUTE('SOCKET /chat/', fn) |
Κάθε μέρος έχει μια συνταγή με περισσότερες λεπτομέρειες· αυτή είναι ολόκληρη η αντιστοίχιση σε ένα σημείο. Το παράδειγμα παρακάτω είναι η πλευρά του Total.js των γραμμών που χρειάζονται κώδικα.
MIDDLEWARE('mw', function($, next) {
$.response.headers['x-a'] = 'b';
next();
});
NEWACTION('Users/create', {
name: 'Create a user',
input: '*email:Email, age:Number',
action: function($, model) {
$.callback({ email: model.email, age: model.age });
}
});exports.install = function() {
ROUTE('GET /users/{id}/', user);
ROUTE('POST /users/ --> *Users/create');
ROUTE('GET /mw/ #mw', ok);
ROUTE('GET /created/', created);
ROUTE('GET /moved/', moved);
ROUTE('GET /cookie/', cookie);
ROUTE('GET /html/', html);
};
function user($) {
$.json({ id: $.params.id, page: $.query.page, token: $.headers['x-token'] });
}
function ok($) {
$.json({ ok: true });
}
function created($) {
$.response.status = 201;
$.json({ created: true });
}
function moved($) {
$.redirect('/users/1/');
}
function cookie($) {
$.cookie('visited', 'yes', '1 day');
$.json({ before: $.cookie('visited') || null });
}
function html($) {
$.html('<p>Hello</p>');
}