ForgeDocumentație
ro

Documentație

De la Express la Total.js 5

Total.js 5 · total5@0.0.19 comparisonexpressmigration Executată cu Total.js 5

Total.js nu este Express cu alt nume. Cele mai mari diferențe: un handler primește un singur obiect, $, în loc de (req, res); corpul este analizat de framework după tipul de conținut; nu instalezi pachete pentru cookie-uri, încărcări, validare, sesiuni, CORS, cron sau e-mail, pentru că fac parte din framework; iar fișierele proiectului tău sunt încărcate din foldere în loc să fie importate (vezi pagina despre structura proiectului).

Tabelul cuprinde modele comune Express cu echivalentele lor de Total.js 5.

SarcinăExpressTotal.js 5
Pornirea serveruluiapp.listen(3000)Total.run({ port: 3000 })
O rutăapp.get('/users', fn)ROUTE('GET /users/', fn) (scrie bara finală)
Parametru de caleapp.get('/users/:id', fn) și req.params.idROUTE('GET /users/{id}/', fn) și $.params.id
Șir de interogarereq.query.page$.query.page
Corp JSONapp.use(express.json()) și req.body$.body, analizat după tipul de conținut
Antetele cereriireq.headers['x-token']$.headers['x-token']
Trimiterea JSONres.json(object)$.json(object)
Trimiterea de text sau HTMLres.send('text')$.plain('text') sau $.html('<p>..</p>')
Cod de stareres.status(404).json(...)$.invalid(404) pentru o eroare, sau $.response.status = 201 înainte de a răspunde
Antetul răspunsuluires.set('x-a', 'b')$.response.headers['x-a'] = 'b'
Redirecționareres.redirect('/x')$.redirect('/x')
Cookie-uricookie-parser, res.cookie(...)$.cookie('name') pentru citire, $.cookie('name', value, '1 day') pentru scriere
Middleware pe o rutăapp.get('/a', mw, fn)MIDDLEWARE('mw', ($, next) => ...) și ROUTE('GET /a/ #mw', fn)
Fișiere staticeapp.use(express.static('public'))Pune fișierele în public/: fără cod
Descărcarea unui fișierres.download(path, name)$.file(path, name)
Șablonres.render('page', model)$.view('page', model)
Validarea intrăriiexpress-validator sau zodinput: '*email:Email, age:Number' pe o acțiune
Pagină de eroareun middleware de gestionare a erorilorROUTE('#404', fn) și ROUTE('#401', fn)
Autentificarepassport sau express-sessionAUTH(fn) și ROUTE('+GET /private/', fn)
Încărcări de fișieremulterflagul @upload și $.files
CORScorsCORS('https://example.com')
Apelarea altui APIaxios sau fetchREQUEST() și RESTBuilder
Sarcini programatenode-cronCRON('0 9 * * 1-5', fn)
Trimiterea de e-mailnodemailerMAIL() și HTMLMAIL() cu mail_smtp în config
WebSocketws sau socket.ioROUTE('SOCKET /chat/', fn)

Fiecare parte are o rețetă cu mai multe detalii; aceasta este toată corespondența într-un singur loc. Exemplul de mai jos este partea Total.js a rândurilor care au nevoie de cod.

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>');
}