Projektová struktura aplikace Total.js 5
Aplikace Total.js je složka se spouštěcím skriptem (index.js) a sadou složek s pevnými názvy. Své soubory neimportujete: při startu aplikace Total.js přečte složky níže a načte každý soubor .js v nich (ve složce plugins/ načte index.js z každé podsložky). Soubor je běžný modul Node.js; pokud exportuje funkci install, Total.js ji po načtení souboru zavolá.
| Složka | Co do ní patří |
|---|---|
controllers/ | Routy: exports.install = function() { ROUTE(...) }. |
definitions/ | Kód, který se spustí při startu a deklaruje globální věci: akce přes NEWACTION(), middleware, AUTH(), helpery, vlastní globální proměnné. |
actions/ | Akce (NEWACTION()), pokud je chcete mít odděleně od ostatních definic. |
schemas/ | Schémata (NEWSCHEMA()) s jejich akcemi. |
models/ | Načítá se při startu jako ostatní; Total.js soubory pouze načte, jejich obsah je na vás. |
middleware/ | Middleware (MIDDLEWARE()), načítaný po ostatních složkách. |
modules/ | Znovupoužitelné moduly; export může mít id (uloží se do MODS) a funkci install. |
extensions/ | Načítá se při startu jako ostatní; Total.js soubory pouze načte, jejich obsah je na vás. |
plugins/ | Pluginy: jedna složka na plugin se souborem index.js. |
views/ | HTML pohledy a layout.html. |
public/ | Statické soubory poskytované tak, jak jsou, bez jakékoli routy. |
resources/ | Překladové soubory (.resource), viz recept o lokalizaci. |
jsonschemas/ | Znovupoužitelné definice vstupu (.txt nebo .json), viz recept o schématech. |
databases/ | Soubory vestavěné NoSQL databáze a MEMORIZE(). |
tmp/ | Dočasné soubory a cache (PATH.tmp()). |
logs/ | Soubory logů. |
private/ | Soubory, které nesmí být veřejné; odešlete je přes $.file() po kontrole. |
workers/ | Soubory NEWTHREAD() a NEWFORK(). |
config | Konfigurační soubor (soubor, nikoli složka). |
Helpery PATH vytvářejí absolutní cestu každé složky: PATH.root(), PATH.public(), PATH.private(), PATH.tmp(), PATH.logs(), PATH.databases(). Vracejí cestu bez koncového lomítka a složka pohledů helper nemá. Příklad vloží soubor do každé složky, kterou Total.js načítá, a přečte zpět, co se načetlo.
(MAIN.loaded = MAIN.loaded || []).push('extensions');(MAIN.loaded = MAIN.loaded || []).push('modules');
module.exports.id = 'modules-file';(MAIN.loaded = MAIN.loaded || []).push('actions');(MAIN.loaded = MAIN.loaded || []).push('schemas');(MAIN.loaded = MAIN.loaded || []).push('models');(MAIN.loaded = MAIN.loaded || []).push('definitions');(MAIN.loaded = MAIN.loaded || []).push('controllers');(MAIN.loaded = MAIN.loaded || []).push('middleware');exports.install = function() {
ROUTE('GET /structure/', structure);
};
function structure($) {
$.json({
loaded: MAIN.loaded || [],
modules: Object.keys(MODS),
paths: {
root: PATH.root(),
public: PATH.public(),
private: PATH.private(),
tmp: PATH.tmp(),
logs: PATH.logs(),
databases: PATH.databases()
}
});
}