ForgeDocumentazione
it

Documentazione

Da Express a Total.js 5

Total.js 5 · total5@0.0.19 comparisonexpressmigration Eseguita con Total.js 5

Total.js non è Express con un altro nome. Le differenze maggiori: un handler riceve un solo oggetto, $, invece di (req, res); il corpo viene analizzato dal framework in base al tipo di contenuto; non installi pacchetti per cookie, upload, validazione, sessioni, CORS, cron o email, perché fanno parte del framework; e i file del progetto vengono caricati dalle cartelle invece di essere importati (vedi la pagina sulla struttura del progetto).

Le tabelle si uniscono a modelli espressi comuni con i loro equivalenti Total.js 5.

CompitoExpressTotal.js 5
Avviare il serverapp.listen(3000)Total.run({ port: 3000 })
Una routeapp.get('/users', fn)ROUTE('GET /users/', fn) (scrivi la barra finale)
Parametro del percorsoapp.get('/users/:id', fn) e req.params.idROUTE('GET /users/{id}/', fn) e $.params.id
Query stringreq.query.page$.query.page
Corpo JSONapp.use(express.json()) e req.body$.body, analizzato in base al tipo di contenuto
Header della richiestareq.headers['x-token']$.headers['x-token']
Inviare JSONres.json(object)$.json(object)
Inviare testo o HTMLres.send('text')$.plain('text') o $.html('<p>..</p>')
Codice di statores.status(404).json(...)$.invalid(404) per un errore, oppure $.response.status = 201 prima di rispondere
Header della rispostares.set('x-a', 'b')$.response.headers['x-a'] = 'b'
Reindirizzamentores.redirect('/x')$.redirect('/x')
Cookiecookie-parser, res.cookie(...)$.cookie('name') per leggere, $.cookie('name', value, '1 day') per scrivere
Middleware su una routeapp.get('/a', mw, fn)MIDDLEWARE('mw', ($, next) => ...) e ROUTE('GET /a/ #mw', fn)
File staticiapp.use(express.static('public'))Metti i file in public/: nessun codice
Scaricare un fileres.download(path, name)$.file(path, name)
Templateres.render('page', model)$.view('page', model)
Validare l'inputexpress-validator o zodinput: '*email:Email, age:Number' su un'azione
Pagina di erroreun middleware di gestione degli erroriROUTE('#404', fn) e ROUTE('#401', fn)
Autenticazionepassport o express-sessionAUTH(fn) e ROUTE('+GET /private/', fn)
Uploadmulteril flag @upload e $.files
CORScorsCORS('https://example.com')
Chiamare un'altra APIaxios o fetchREQUEST() e RESTBuilder
Job pianificatinode-cronCRON('0 9 * * 1-5', fn)
Inviare emailnodemailerMAIL() e HTMLMAIL() con mail_smtp in config
WebSocketws o socket.ioROUTE('SOCKET /chat/', fn)

Ogni parte ha una ricetta con più dettagli; questa è l'intera corrispondenza in un unico posto. L'esempio qui sotto è il lato Total.js delle righe che richiedono codice.

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