От Express към Total.js 5
Total.js не е Express с друго име. Най-големите разлики: манипулаторът получава един-единствен обект, $, вместо (req, res); тялото се анализира от фреймуърка според типа на съдържанието; не инсталирате пакети за бисквитки, качвания, валидация, сесии, CORS, cron или имейл, защото са част от фреймуърка; а файловете на проекта ви се зареждат от папки вместо да се импортират (вижте страницата за структурата на проекта).
Таблицата двойки общи експресни шаблони с техните Total.js 5 еквиваленти.
| Задача | Express | Total.js 5 |
|---|---|---|
| Стартиране на сървъра | app.listen(3000) | Total.run({ port: 3000 }) |
| Маршрут | app.get('/users', fn) | ROUTE('GET /users/', fn) (напишете завършващата наклонена черта) |
| Параметър на пътя | app.get('/users/:id', fn) и req.params.id | ROUTE('GET /users/{id}/', fn) и $.params.id |
| Низ на заявката | req.query.page | $.query.page |
| JSON тяло | app.use(express.json()) и req.body | $.body, анализирано според типа на съдържанието |
| Заглавия на заявката | req.headers['x-token'] | $.headers['x-token'] |
| Изпращане на JSON | res.json(object) | $.json(object) |
| Изпращане на текст или HTML | res.send('text') | $.plain('text') или $.html('<p>..</p>') |
| Код на състоянието | res.status(404).json(...) | $.invalid(404) за грешка, или $.response.status = 201 преди да отговорите |
| Заглавие на отговора | res.set('x-a', 'b') | $.response.headers['x-a'] = 'b' |
| Пренасочване | res.redirect('/x') | $.redirect('/x') |
| Бисквитки | cookie-parser, res.cookie(...) | $.cookie('name') за четене, $.cookie('name', value, '1 day') за запис |
| Middleware на маршрут | app.get('/a', mw, fn) | MIDDLEWARE('mw', ($, next) => ...) и ROUTE('GET /a/ #mw', fn) |
| Статични файлове | app.use(express.static('public')) | Сложете файловете в public/: без код |
| Изтегляне на файл | res.download(path, name) | $.file(path, name) |
| Шаблон | res.render('page', model) | $.view('page', model) |
| Валидиране на входа | express-validator или zod | input: '*email:Email, age:Number' върху действие |
| Страница за грешка | middleware за обработка на грешки | ROUTE('#404', fn) и ROUTE('#401', fn) |
| Автентикация | passport или express-session | AUTH(fn) и ROUTE('+GET /private/', fn) |
| Качвания на файлове | multer | флагът @upload и $.files |
| CORS | cors | CORS('https://example.com') |
| Извикване на друго API | axios или fetch | REQUEST() и RESTBuilder |
| Планирани задачи | node-cron | CRON('0 9 * * 1-5', fn) |
| Изпращане на имейл | nodemailer | MAIL() и HTMLMAIL() с mail_smtp в config |
| WebSocket | ws или socket.io | ROUTE('SOCKET /chat/', fn) |
Всяка част има рецепта с повече подробности; това е цялото съответствие на едно място. Примерът по-долу е страната на Total.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 });
}
});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>');
}