D’Express à Total.js 5
Total.js n'est pas Express sous un autre nom. Les plus grandes différences : un gestionnaire reçoit un seul objet, $, au lieu de (req, res) ; le corps est analysé par le framework selon son type de contenu ; vous n'installez pas de paquets pour les cookies, les envois de fichiers, la validation, les sessions, CORS, cron ou le courriel, car ils font partie du framework ; et les fichiers de votre projet sont chargés depuis des dossiers au lieu d'être importés (voir la page sur la structure du projet).
Les tableaux couvrent des modèles Express communs avec leurs équivalents Total.js 5.
| Tâche | Express | Total.js 5 |
|---|---|---|
| Démarrer le serveur | app.listen(3000) | Total.run({ port: 3000 }) |
| Une route | app.get('/users', fn) | ROUTE('GET /users/', fn) (écrivez la barre oblique finale) |
| Paramètre de chemin | app.get('/users/:id', fn) et req.params.id | ROUTE('GET /users/{id}/', fn) et $.params.id |
| Chaîne de requête | req.query.page | $.query.page |
| Corps JSON | app.use(express.json()) et req.body | $.body, analysé selon son type de contenu |
| En-têtes de la requête | req.headers['x-token'] | $.headers['x-token'] |
| Envoyer du JSON | res.json(object) | $.json(object) |
| Envoyer du texte ou du HTML | res.send('text') | $.plain('text') ou $.html('<p>..</p>') |
| Code d'état | res.status(404).json(...) | $.invalid(404) pour une erreur, ou $.response.status = 201 avant de répondre |
| En-tête de la réponse | res.set('x-a', 'b') | $.response.headers['x-a'] = 'b' |
| Redirection | res.redirect('/x') | $.redirect('/x') |
| Cookies | cookie-parser, res.cookie(...) | $.cookie('name') pour lire, $.cookie('name', value, '1 day') pour écrire |
| Middleware sur une route | app.get('/a', mw, fn) | MIDDLEWARE('mw', ($, next) => ...) et ROUTE('GET /a/ #mw', fn) |
| Fichiers statiques | app.use(express.static('public')) | Placez les fichiers dans public/ : aucun code |
| Télécharger un fichier | res.download(path, name) | $.file(path, name) |
| Modèle | res.render('page', model) | $.view('page', model) |
| Valider l'entrée | express-validator ou zod | input: '*email:Email, age:Number' sur une action |
| Page d'erreur | un middleware de gestion d'erreurs | ROUTE('#404', fn) et ROUTE('#401', fn) |
| Authentification | passport ou express-session | AUTH(fn) et ROUTE('+GET /private/', fn) |
| Envois de fichiers | multer | le drapeau @upload et $.files |
| CORS | cors | CORS('https://example.com') |
| Appeler une autre API | axios ou fetch | REQUEST() et RESTBuilder |
| Tâches planifiées | node-cron | CRON('0 9 * * 1-5', fn) |
| Envoyer un courriel | nodemailer | MAIL() et HTMLMAIL() avec mail_smtp dans config |
| WebSocket | ws ou socket.io | ROUTE('SOCKET /chat/', fn) |
Chaque partie a une recette plus détaillée ; voici toute la correspondance au même endroit. L'exemple ci-dessous est le côté Total.js des lignes qui nécessitent du code.
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>');
}