ForgeDocumentación
es

Documentación

De Express a Total.js 5

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

Total.js no es Express con otro nombre. Las mayores diferencias: un manejador recibe un solo objeto, $, en lugar de (req, res); el cuerpo lo analiza el framework según su tipo de contenido; no instalas paquetes para cookies, subidas, validación, sesiones, CORS, cron o correo, porque forman parte del framework; y los archivos de tu proyecto se cargan desde carpetas en lugar de importarse (consulta la página de estructura del proyecto).

Estas tablas comparan patrones habituales de Express con sus equivalentes en Total.js 5.

TareaExpressTotal.js 5
Iniciar el servidorapp.listen(3000)Total.run({ port: 3000 })
Una rutaapp.get('/users', fn)ROUTE('GET /users/', fn) (escribe la barra final)
Parámetro de rutaapp.get('/users/:id', fn) y req.params.idROUTE('GET /users/{id}/', fn) y $.params.id
Cadena de consultareq.query.page$.query.page
Cuerpo JSONapp.use(express.json()) y req.body$.body, analizado según su tipo de contenido
Cabeceras de la peticiónreq.headers['x-token']$.headers['x-token']
Enviar JSONres.json(object)$.json(object)
Enviar texto o HTMLres.send('text')$.plain('text') o $.html('<p>..</p>')
Código de estadores.status(404).json(...)$.invalid(404) para un error, o $.response.status = 201 antes de responder
Cabecera de la respuestares.set('x-a', 'b')$.response.headers['x-a'] = 'b'
Redirecciónres.redirect('/x')$.redirect('/x')
Cookiescookie-parser, res.cookie(...)$.cookie('name') para leer, $.cookie('name', value, '1 day') para escribir
Middleware en una rutaapp.get('/a', mw, fn)MIDDLEWARE('mw', ($, next) => ...) y ROUTE('GET /a/ #mw', fn)
Archivos estáticosapp.use(express.static('public'))Pon los archivos en public/: sin código
Descargar un archivores.download(path, name)$.file(path, name)
Plantillares.render('page', model)$.view('page', model)
Validar la entradaexpress-validator o zodinput: '*email:Email, age:Number' en una acción
Página de errorun middleware de manejo de erroresROUTE('#404', fn) y ROUTE('#401', fn)
Autenticaciónpassport o express-sessionAUTH(fn) y ROUTE('+GET /private/', fn)
Subidas de archivosmulterel flag @upload y $.files
CORScorsCORS('https://example.com')
Llamar a otra APIaxios o fetchREQUEST() y RESTBuilder
Tareas programadasnode-cronCRON('0 9 * * 1-5', fn)
Enviar correonodemailerMAIL() y HTMLMAIL() con mail_smtp en config
WebSocketws o socket.ioROUTE('SOCKET /chat/', fn)

Cada parte tiene una receta con más detalle; esta es toda la correspondencia en un solo lugar. El ejemplo de abajo es el lado de Total.js de las filas que necesitan código.

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