Projektstruktur einer Total.js 5 Anwendung
Eine Total.js-Anwendung ist ein Ordner mit einem Startskript (index.js) und einer Reihe von Ordnern mit festen Namen. Du importierst deine Dateien nicht: Beim Start liest Total.js die folgenden Ordner und lädt jede .js-Datei darin (in einem Ordner namens plugins/ lädt es die index.js jedes Unterordners). Eine Datei ist ein normales Node.js-Modul; exportiert sie eine install-Funktion, ruft Total.js sie nach dem Laden der Datei auf.
| Ordner | Was hineingehört |
|---|---|
controllers/ | Routen: exports.install = function() { ROUTE(...) }. |
definitions/ | Code, der beim Start läuft und globale Dinge deklariert: Actions mit NEWACTION(), Middleware, AUTH(), Helper, eigene Globals. |
actions/ | Actions (NEWACTION()), wenn du sie getrennt von den übrigen Definitionen halten möchtest. |
schemas/ | Schemas (NEWSCHEMA()) mit ihren Actions. |
models/ | Wird beim Start wie die anderen geladen; Total.js lädt nur die Dateien, was sie enthalten, liegt bei dir. |
middleware/ | Middleware (MIDDLEWARE()), nach den anderen Ordnern geladen. |
modules/ | Wiederverwendbare Module; der Export kann eine id (wird in MODS gehalten) und eine install-Funktion haben. |
extensions/ | Wird beim Start wie die anderen geladen; Total.js lädt nur die Dateien, was sie enthalten, liegt bei dir. |
plugins/ | Plugins: ein Ordner pro Plugin mit einer index.js. |
views/ | HTML-Views und das layout.html. |
public/ | Statische Dateien, die unverändert und ohne Route ausgeliefert werden. |
resources/ | Übersetzungsdateien (.resource), siehe das Rezept zur Lokalisierung. |
jsonschemas/ | Wiederverwendbare Eingabedefinitionen (.txt oder .json), siehe das Rezept zu Schemas. |
databases/ | Dateien der eingebauten NoSQL-Datenbank und von MEMORIZE(). |
tmp/ | Temporäre Dateien und Caches (PATH.tmp()). |
logs/ | Logdateien. |
private/ | Dateien, die nicht öffentlich sein dürfen; sende sie nach einer Prüfung mit $.file(). |
workers/ | Dateien von NEWTHREAD() und NEWFORK(). |
config | Die Konfigurationsdatei (eine Datei, kein Ordner). |
Die Helper von PATH bauen den absoluten Pfad jedes Ordners: PATH.root(), PATH.public(), PATH.private(), PATH.tmp(), PATH.logs(), PATH.databases(). Sie liefern den Pfad ohne abschließenden Schrägstrich, und für den Ordner der Views gibt es keinen Helper. Das Beispiel legt in jeden der Ordner, die Total.js lädt, eine Datei und liest zurück, was geladen wurde.
(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()
}
});
}