ForgeDocumentation
fr

Documentation

D’Express à Total.js 5

Total.js 5 · total5@0.0.19 comparisonexpressmigration Exécutée avec 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âcheExpressTotal.js 5
Démarrer le serveurapp.listen(3000)Total.run({ port: 3000 })
Une routeapp.get('/users', fn)ROUTE('GET /users/', fn) (écrivez la barre oblique finale)
Paramètre de cheminapp.get('/users/:id', fn) et req.params.idROUTE('GET /users/{id}/', fn) et $.params.id
Chaîne de requêtereq.query.page$.query.page
Corps JSONapp.use(express.json()) et req.body$.body, analysé selon son type de contenu
En-têtes de la requêtereq.headers['x-token']$.headers['x-token']
Envoyer du JSONres.json(object)$.json(object)
Envoyer du texte ou du HTMLres.send('text')$.plain('text') ou $.html('<p>..</p>')
Code d'étatres.status(404).json(...)$.invalid(404) pour une erreur, ou $.response.status = 201 avant de répondre
En-tête de la réponseres.set('x-a', 'b')$.response.headers['x-a'] = 'b'
Redirectionres.redirect('/x')$.redirect('/x')
Cookiescookie-parser, res.cookie(...)$.cookie('name') pour lire, $.cookie('name', value, '1 day') pour écrire
Middleware sur une routeapp.get('/a', mw, fn)MIDDLEWARE('mw', ($, next) => ...) et ROUTE('GET /a/ #mw', fn)
Fichiers statiquesapp.use(express.static('public'))Placez les fichiers dans public/ : aucun code
Télécharger un fichierres.download(path, name)$.file(path, name)
Modèleres.render('page', model)$.view('page', model)
Valider l'entréeexpress-validator ou zodinput: '*email:Email, age:Number' sur une action
Page d'erreurun middleware de gestion d'erreursROUTE('#404', fn) et ROUTE('#401', fn)
Authentificationpassport ou express-sessionAUTH(fn) et ROUTE('+GET /private/', fn)
Envois de fichiersmulterle drapeau @upload et $.files
CORScorsCORS('https://example.com')
Appeler une autre APIaxios ou fetchREQUEST() et RESTBuilder
Tâches planifiéesnode-cronCRON('0 9 * * 1-5', fn)
Envoyer un courrielnodemailerMAIL() et HTMLMAIL() avec mail_smtp dans config
WebSocketws ou socket.ioROUTE('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.

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