ForgeDocumentação
pt

Documentação

De Express para Total.js 5

Total.js 5 · total5@0.0.19 comparisonexpressmigration Executada com o Total.js 5

O Total.js não é o Express com outro nome. As maiores diferenças: um manipulador recebe um único objeto, $, em vez de (req, res); o corpo é analisado pelo framework segundo o seu tipo de conteúdo; não instala pacotes para cookies, uploads, validação, sessões, CORS, cron ou email, porque fazem parte do framework; e os ficheiros do seu projeto são carregados a partir de pastas em vez de importados (veja a página sobre a estrutura do projeto).

Os padrões express comuns são pares de tabelas com seus equivalentes Total.js 5.

TarefaExpressTotal.js 5
Iniciar o servidorapp.listen(3000)Total.run({ port: 3000 })
Uma rotaapp.get('/users', fn)ROUTE('GET /users/', fn) (escreva a barra final)
Parâmetro do caminhoapp.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, analisado segundo o tipo de conteúdo
Cabeçalhos do pedidoreq.headers['x-token']$.headers['x-token']
Enviar JSONres.json(object)$.json(object)
Enviar texto ou HTMLres.send('text')$.plain('text') ou $.html('<p>..</p>')
Código de estadores.status(404).json(...)$.invalid(404) para um erro, ou $.response.status = 201 antes de responder
Cabeçalho da respostares.set('x-a', 'b')$.response.headers['x-a'] = 'b'
Redirecionamentores.redirect('/x')$.redirect('/x')
Cookiescookie-parser, res.cookie(...)$.cookie('name') para ler, $.cookie('name', value, '1 day') para escrever
Middleware numa rotaapp.get('/a', mw, fn)MIDDLEWARE('mw', ($, next) => ...) e ROUTE('GET /a/ #mw', fn)
Ficheiros estáticosapp.use(express.static('public'))Coloque os ficheiros em public/: sem código
Descarregar um ficheirores.download(path, name)$.file(path, name)
Modelores.render('page', model)$.view('page', model)
Validar a entradaexpress-validator ou zodinput: '*email:Email, age:Number' numa ação
Página de erroum middleware de tratamento de errosROUTE('#404', fn) e ROUTE('#401', fn)
Autenticaçãopassport ou express-sessionAUTH(fn) e ROUTE('+GET /private/', fn)
Uploadsmultera flag @upload e $.files
CORScorsCORS('https://example.com')
Chamar outra APIaxios ou fetchREQUEST() e RESTBuilder
Tarefas agendadasnode-cronCRON('0 9 * * 1-5', fn)
Enviar emailnodemailerMAIL() e HTMLMAIL() com mail_smtp em config
WebSocketws ou socket.ioROUTE('SOCKET /chat/', fn)

Cada parte tem uma receita com mais detalhe; esta é toda a correspondência num só lugar. O exemplo abaixo é o lado Total.js das linhas que precisam de 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>');
}