Struttura del progetto di un'applicazione Total.js
Un'applicazione Total.js è una cartella con uno script di avvio (index.js) e un insieme di cartelle con nomi fissi. Non importi i tuoi file: all'avvio, Total.js legge le cartelle qui sotto e carica ogni file .js che contengono (in una cartella chiamata plugins/ carica l'index.js di ogni sottocartella). Un file è un normale modulo Node.js; se esporta una funzione install, Total.js la chiama dopo aver caricato il file.
| Cartella | Cosa contiene |
|---|---|
controllers/ | Route: exports.install = function() { ROUTE(...) }. |
definitions/ | Codice eseguito all'avvio che dichiara cose globali: azioni con NEWACTION(), middleware, AUTH(), helper, i tuoi globali. |
actions/ | Azioni (NEWACTION()), se preferisci tenerle separate dalle altre definizioni. |
schemas/ | Schemi (NEWSCHEMA()) con le loro azioni. |
models/ | Caricata all'avvio come le altre; Total.js carica solo i file, il contenuto sta a te. |
middleware/ | Middleware (MIDDLEWARE()), caricato dopo le altre cartelle. |
modules/ | Moduli riutilizzabili; l'export può avere un id (conservato in MODS) e una funzione install. |
extensions/ | Caricata all'avvio come le altre; Total.js carica solo i file, il contenuto sta a te. |
plugins/ | Plugin: una cartella per plugin con un index.js. |
views/ | Viste HTML e il layout.html. |
public/ | File statici serviti così come sono, senza alcuna route. |
resources/ | File di traduzione (.resource), vedi la ricetta sulla localizzazione. |
jsonschemas/ | Definizioni di input riutilizzabili (.txt o .json), vedi la ricetta sugli schemi. |
databases/ | File del database NoSQL integrato e di MEMORIZE(). |
tmp/ | File temporanei e cache (PATH.tmp()). |
logs/ | File di log. |
private/ | File che non devono essere pubblici; inviali con $.file() dopo un controllo. |
workers/ | File di NEWTHREAD() e NEWFORK(). |
config | Il file di configurazione (un file, non una cartella). |
Gli helper di PATH costruiscono il percorso assoluto di ogni cartella: PATH.root(), PATH.public(), PATH.private(), PATH.tmp(), PATH.logs(), PATH.databases(). Restituiscono il percorso senza barra finale e la cartella delle viste non ha un helper. L'esempio inserisce un file in ciascuna delle cartelle che Total.js carica e rilegge ciò che è stato caricato.
(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()
}
});
}