Estrutura do projeto de um aplicativo Total.js 5
Uma aplicação Total.js é uma pasta com um script de arranque (index.js) e um conjunto de pastas com nomes fixos. Não importa os seus ficheiros: quando a aplicação arranca, o Total.js lê as pastas abaixo e carrega cada ficheiro .js que contêm (numa pasta chamada plugins/ carrega o index.js de cada subpasta). Um ficheiro é um módulo Node.js normal; se exportar uma função install, o Total.js chama-a depois de carregar o ficheiro.
| Pasta | O que contém |
|---|---|
controllers/ | Rotas: exports.install = function() { ROUTE(...) }. |
definitions/ | Código que corre no arranque e declara coisas globais: ações com NEWACTION(), middleware, AUTH(), helpers, os seus próprios globais. |
actions/ | Ações (NEWACTION()), quando prefere tê-las separadas das outras definições. |
schemas/ | Esquemas (NEWSCHEMA()) com as suas ações. |
models/ | Carregada no arranque como as outras; o Total.js apenas carrega os ficheiros, o que contêm fica ao seu critério. |
middleware/ | Middleware (MIDDLEWARE()), carregado depois das outras pastas. |
modules/ | Módulos reutilizáveis; a exportação pode ter um id (guardado em MODS) e uma função install. |
extensions/ | Carregada no arranque como as outras; o Total.js apenas carrega os ficheiros, o que contêm fica ao seu critério. |
plugins/ | Plugins: uma pasta por plugin com um index.js. |
views/ | Vistas HTML e o layout.html. |
public/ | Ficheiros estáticos servidos tal como estão, sem qualquer rota. |
resources/ | Ficheiros de tradução (.resource), veja a receita de localização. |
jsonschemas/ | Definições de entrada reutilizáveis (.txt ou .json), veja a receita de esquemas. |
databases/ | Ficheiros da base de dados NoSQL integrada e de MEMORIZE(). |
tmp/ | Ficheiros temporários e caches (PATH.tmp()). |
logs/ | Ficheiros de registo. |
private/ | Ficheiros que não devem ser públicos; envie-os com $.file() depois de uma verificação. |
workers/ | Ficheiros de NEWTHREAD() e NEWFORK(). |
config | O ficheiro de configuração (um ficheiro, não uma pasta). |
Os helpers de PATH constroem o caminho absoluto de cada pasta: PATH.root(), PATH.public(), PATH.private(), PATH.tmp(), PATH.logs(), PATH.databases(). Devolvem o caminho sem barra final, e a pasta das vistas não tem helper. O exemplo coloca um ficheiro em cada uma das pastas que o Total.js carrega e lê de volta o que foi carregado.
(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()
}
});
}