ForgeDokumentation
de

Dokumentation

Von Express zu Total.js 5

Total.js 5 · total5@0.0.19 comparisonexpressmigration Mit Total.js 5 ausgeführt

Total.js ist nicht Express mit anderem Namen. Die größten Unterschiede: Ein Handler erhält ein einziges Objekt, $, statt (req, res); der Body wird vom Framework anhand seines Content-Types geparst; du installierst keine Pakete für Cookies, Uploads, Validierung, Sessions, CORS, Cron oder E-Mail, weil sie Teil des Frameworks sind; und die Dateien deines Projekts werden aus Ordnern geladen, statt importiert zu werden (siehe die Seite zur Projektstruktur).

Die Tabelle Paare gemeinsame Express-Patern mit ihren Total.js 5 Äquivalenten.

AufgabeExpressTotal.js 5
Server startenapp.listen(3000)Total.run({ port: 3000 })
Eine Routeapp.get('/users', fn)ROUTE('GET /users/', fn) (den abschließenden Schrägstrich schreiben)
Pfadparameterapp.get('/users/:id', fn) und req.params.idROUTE('GET /users/{id}/', fn) und $.params.id
Query-Stringreq.query.page$.query.page
JSON-Bodyapp.use(express.json()) und req.body$.body, anhand des Content-Types geparst
Request-Headerreq.headers['x-token']$.headers['x-token']
JSON sendenres.json(object)$.json(object)
Text oder HTML sendenres.send('text')$.plain('text') oder $.html('<p>..</p>')
Statuscoderes.status(404).json(...)$.invalid(404) für einen Fehler, oder $.response.status = 201 vor der Antwort
Response-Headerres.set('x-a', 'b')$.response.headers['x-a'] = 'b'
Weiterleitungres.redirect('/x')$.redirect('/x')
Cookiescookie-parser, res.cookie(...)$.cookie('name') zum Lesen, $.cookie('name', value, '1 day') zum Schreiben
Middleware an einer Routeapp.get('/a', mw, fn)MIDDLEWARE('mw', ($, next) => ...) und ROUTE('GET /a/ #mw', fn)
Statische Dateienapp.use(express.static('public'))Lege die Dateien in public/ ab: kein Code
Datei herunterladenres.download(path, name)$.file(path, name)
Templateres.render('page', model)$.view('page', model)
Eingabe validierenexpress-validator oder zodinput: '*email:Email, age:Number' an einer Action
Fehlerseiteeine Middleware zur FehlerbehandlungROUTE('#404', fn) und ROUTE('#401', fn)
Authentifizierungpassport oder express-sessionAUTH(fn) und ROUTE('+GET /private/', fn)
Uploadsmulterdas Flag @upload und $.files
CORScorsCORS('https://example.com')
Andere API aufrufenaxios oder fetchREQUEST() und RESTBuilder
Geplante Jobsnode-cronCRON('0 9 * * 1-5', fn)
E-Mail sendennodemailerMAIL() und HTMLMAIL() mit mail_smtp in config
WebSocketws oder socket.ioROUTE('SOCKET /chat/', fn)

Zu jedem Teil gibt es ein Rezept mit mehr Details; hier ist die gesamte Zuordnung an einem Ort. Das Beispiel unten ist die Total.js-Seite der Zeilen, die Code brauchen.

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