Struktura projektu aplikacji Total.js 5
Aplikacja Total.js to folder ze skryptem startowym (index.js) i zestawem folderów o stałych nazwach. Nie importujesz swoich plików: przy starcie aplikacji Total.js czyta poniższe foldery i ładuje każdy znajdujący się w nich plik .js (w folderze o nazwie plugins/ ładuje index.js z każdego podfolderu). Plik jest zwykłym modułem Node.js; jeśli eksportuje funkcję install, Total.js wywołuje ją po załadowaniu pliku.
| Folder | Co w nim umieścić |
|---|---|
controllers/ | Trasy: exports.install = function() { ROUTE(...) }. |
definitions/ | Kod uruchamiany przy starcie, który deklaruje rzeczy globalne: akcje przez NEWACTION(), middleware, AUTH(), helpery, własne zmienne globalne. |
actions/ | Akcje (NEWACTION()), jeśli wolisz trzymać je osobno od pozostałych definicji. |
schemas/ | Schematy (NEWSCHEMA()) wraz z ich akcjami. |
models/ | Ładowany przy starcie jak pozostałe; Total.js tylko ładuje pliki, ich zawartość zależy od ciebie. |
middleware/ | Middleware (MIDDLEWARE()), ładowany po pozostałych folderach. |
modules/ | Moduły wielokrotnego użytku; eksport może mieć id (przechowywany w MODS) i funkcję install. |
extensions/ | Ładowany przy starcie jak pozostałe; Total.js tylko ładuje pliki, ich zawartość zależy od ciebie. |
plugins/ | Wtyczki: jeden folder na wtyczkę z plikiem index.js. |
views/ | Widoki HTML i layout.html. |
public/ | Pliki statyczne serwowane bez zmian, bez żadnej trasy. |
resources/ | Pliki tłumaczeń (.resource), zobacz przepis o lokalizacji. |
jsonschemas/ | Definicje wejścia wielokrotnego użytku (.txt lub .json), zobacz przepis o schematach. |
databases/ | Pliki wbudowanej bazy NoSQL i MEMORIZE(). |
tmp/ | Pliki tymczasowe i pamięć podręczna (PATH.tmp()). |
logs/ | Pliki logów. |
private/ | Pliki, które nie mogą być publiczne; wysyłaj je przez $.file() po sprawdzeniu. |
workers/ | Pliki NEWTHREAD() i NEWFORK(). |
config | Plik konfiguracji (plik, nie folder). |
Helpery PATH budują ścieżkę bezwzględną każdego folderu: PATH.root(), PATH.public(), PATH.private(), PATH.tmp(), PATH.logs(), PATH.databases(). Zwracają ścieżkę bez końcowego ukośnika, a folder widoków nie ma helpera. Przykład umieszcza plik w każdym z folderów ładowanych przez Total.js i odczytuje, co zostało załadowane.
(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()
}
});
}