2016-01-09 22 views
5

Express

In vaniglia Express.js, il seguente codice funziona bene.È possibile utilizzare più motori di template in Sails.js?

var app = require('express')(); 

app.get('/jade', function(req, res) { 
    res.render('slash.jade'); 
}); 

app.get('/ejs', function(req, res) { 
    res.render('slash.ejs'); 
}); 

app.listen(1338); 

Fintanto che i moduli sono presenti in node_modules, entrambi i modelli sono resi dai motori appropriati.

È anche possibile specificare un motore di default in questo modo:

app.set('view engine', 'haml'); 
app.get('/', function(req, res) { 
    res.render('slash'); //looks for slash.haml in views directory 
}); 

In Espresso, il motore di visualizzazione predefinita viene utilizzato solo quando the extension is omitted.

Sails

In Sails.js, sembra che il motore specificato config/view.js è l'unico motore mai usato.

Se provo a specificare direttamente l'estensione, ottengo il seguente errore:

error: Ignoring attempt to bind route (/barn) to unknown view: barn.jade 

E 'possibile utilizzare diversi motori di vista, senza una grande quantità di voodoo a vele?

risposta

1

La risposta breve e più precisa è no.

Fuori dalla noia, ho dato un'occhiata a questa domanda e ho fatto un po 'di approfondimento nel codice del motore delle viste in vele. Se interessati si possono anche trovare questi file nel progetto vele andando alla directory:

node_modules\sails\lib\hooks\views

Cosa si può trovare, è vele fuori dalla scatola, è impostato per utilizzare un solo motore di visualizzazione. Nella suddetta directory, troverai un file chiamato configure.js, è qui che si verifica la logica che sta dietro l'impostazione di un motore di visualizzazione personalizzato.

Ecco un frammento dal codice

// Normalize view engine config and allow defining a custom extension 
if (_.isString(sails.config.views.engine)) { 
    var viewExt = sails.config.views.extension || sails.config.views.engine; 
    sails.config.views.engine = { 
      name: sails.config.views.engine, 
      ext: viewExt 
    }; 
} 

// Get the view engine name 
var engineName = sails.config.views.engine.name || sails.config.views.engine.ext; 

Purtroppo, non v'è alcun collegamento in cascata per impostare più motori. Sails utilizza semplicemente il motore passato nel parametro sails.config.views.engine e passa da lì.

+0

Questo è quello che stavo iniziando a capire. Grazie per il check-out! –