2013-01-21 10 views
8

Io fondamentalmente hanno un'applicazione expressjs con le seguenti dirs:visualizzazioni più directory per un expressjs app

app/views 

e

app/plugin/views 

e vorrebbero essere in grado di servire da entrambe le directory.

come funzionerà?

ho provato a installare

app.set('views', second_dir) 

ma poi la mia app non troverete il mio primo elenco vista.

poi ho provato un collegamento simbolico alla cartella,

fs.exists(viewDir, function() { 
    fs.symlink(viewDir, rootViewDir, 'dir', function(err) { 
     console.log('adding symlink with err: '+err+ ' in viewdir ='+viewDir+' rootDir ='+rootViewDir); 
    }); 
    }); 

questo funziona, crea il link simbolico (in modo permanente), ma il nodo non è in grado di leggere viste collegato simbolicamente come sembra.

c'è una soluzione per il mio dilemma?

Grazie mille, divertirsi Jascha

risposta

2

trovato questo video di TJ holowaychuk dove ha appena crea applicazioni esplicite aggiuntive per i plugin. http://vimeo.com/56166857

ha anche menziona specificamente l'eredità di variabili "globali" nei commenti del video, che significa che le app.locals e cose del genere dovrebbero essere le stesse in ogni esprimono applicazione della catena di applicazioni e plugin , questo sarà messo alla prova adesso :)

in ogni modo, volevo solo rispondere alla mia domanda con una risposta ho inizialmente respinto senza prove (perché i didnt presumo che questo legame globale di variabili esiste;))

divertirsi

Jascha

3

Perché non cambiare il modo che hai le tue opinioni strutturati in modo che la cartella 'plug-in' esiste sotto cartella 'vista'? Poi, quando si esegue il rendering vostro punto di vista, è possibile specificare il sub-percorso in quel momento:

res.render('plugin/pluginview1', ...); 
+0

questa in realtà è una soluzione a cui non ho ancora pensato :) – jascha

1

Sono in esecuzione Node.JS v0.8.20, Express.JS v4.2.0 e v0.8.8 EJS ho il mio percorso 'viste' definito in app.js come:

app.set('views', path.join(__dirname, 'views')); 

ho definito dalla struttura della cartella delle viste da \views\{model}\{operations}. Ad esempio: \views\products\add.ejs.

Quando faccio riferimento alla vista nel file di percorso, ad esempio in \routes\products.js, faccio riferimento alla sottodirectory e faccio scappare la barra rovesciata.Ad esempio, fare riferimento al file views\products\add.ejs, io uso:

res.render('products\\add'); 

mi piace questo formato in quanto mi permette di mantenere le mie operazioni modello in vista uno per file e poi raggruppare le operazioni al modello a oggetti in cartelle.

Problemi correlati