是否可以在Sails.js中使用多个模板引擎?

Cod*_*ing 5 express sails.js

表达

在vanilla Express.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);
Run Code Online (Sandbox Code Playgroud)

只要存在模块node_modules,两个模板都由适当的引擎呈现.

您还可以指定默认引擎,如下所示:

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

在Express中,默认视图引擎仅在省略扩展时使用.

在Sails.js中,似乎指定的引擎config/view.js是有史以来唯一使用的引擎.

如果我尝试直接指定扩展名,我会收到以下错误:

error: Ignoring attempt to bind route (/barn) to unknown view: barn.jade
Run Code Online (Sandbox Code Playgroud)

是否有可能在Sails中使用不同的视图引擎而没有大量的伏都教?

Gle*_*len 1

最简短且最准确的答案是否定的。

出于无聊,我看了一下这个问题,并对 sails 中的视图引擎代码进行了一些深入研究。如果有兴趣,您还可以通过转到以下目录在 sails 项目中找到这些文件:

node_modules\sails\lib\hooks\views

您会发现,sails 开箱即用,设置为仅使用一个视图引擎。在上面的目录中,您将找到一个名为configure.js的文件,这是设置自定义视图引擎背后的逻辑发生的地方。

这是代码片段

// 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;
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有循环来设置多个引擎。Sails 仅使用参数 sails.config.views.engine 中传递的引擎并从那里开始。