Projectstructuur van een Total.js 5 applicatie
Een Total.js-applicatie is een map met een startscript (index.js) en een aantal mappen met vaste namen. Je importeert je bestanden niet: bij het starten leest Total.js de onderstaande mappen en laadt elk .js-bestand daarin (in een map met de naam plugins/ laadt het de index.js van elke submap). Een bestand is een gewone Node.js-module; als het een install-functie exporteert, roept Total.js die aan na het laden van het bestand.
| Map | Wat erin hoort |
|---|---|
controllers/ | Routes: exports.install = function() { ROUTE(...) }. |
definitions/ | Code die bij het starten draait en globale zaken declareert: acties met NEWACTION(), middleware, AUTH(), helpers, je eigen globals. |
actions/ | Acties (NEWACTION()), als je ze liever apart houdt van de andere definities. |
schemas/ | Schema's (NEWSCHEMA()) met hun acties. |
models/ | Wordt bij het starten geladen zoals de andere; Total.js laadt alleen de bestanden, wat erin staat is aan jou. |
middleware/ | Middleware (MIDDLEWARE()), geladen na de andere mappen. |
modules/ | Herbruikbare modules; de export kan een id hebben (wordt bewaard in MODS) en een install-functie. |
extensions/ | Wordt bij het starten geladen zoals de andere; Total.js laadt alleen de bestanden, wat erin staat is aan jou. |
plugins/ | Plugins: een map per plugin met een index.js. |
views/ | HTML-views en de layout.html. |
public/ | Statische bestanden die ongewijzigd worden geserveerd, zonder enige route. |
resources/ | Vertaalbestanden (.resource), zie het recept over lokalisatie. |
jsonschemas/ | Herbruikbare invoerdefinities (.txt of .json), zie het recept over schema's. |
databases/ | Bestanden van de ingebouwde NoSQL-database en van MEMORIZE(). |
tmp/ | Tijdelijke bestanden en caches (PATH.tmp()). |
logs/ | Logbestanden. |
private/ | Bestanden die niet openbaar mogen zijn; verstuur ze met $.file() na een controle. |
workers/ | Bestanden van NEWTHREAD() en NEWFORK(). |
config | Het configuratiebestand (een bestand, geen map). |
De helpers van PATH bouwen het absolute pad van elke map: PATH.root(), PATH.public(), PATH.private(), PATH.tmp(), PATH.logs(), PATH.databases(). Ze geven het pad zonder slash aan het einde terug, en de map van de views heeft geen helper. Het voorbeeld plaatst een bestand in elk van de mappen die Total.js laadt en leest terug wat er is geladen.
(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()
}
});
}