如果您正在使用“express-handlebars”模块,则以下内容应该有效:
app.set("views", __dirname );
exphbs.ExpressHandlebars.prototype.layoutsDir = 'path/to/directory/';
app.engine('handlebars', exphbs({defaultView: 'name-of-template'}));
我是通过研究模块源代码发现的这个问题,事实证明这一行代码...
// express-handlebars/lib/express-handlebars.js (line 55 in v1.2.2)
ExpressHandlebars.prototype.layoutsDir = 'views/layouts/'
这就是默认行为,始终在“{{你指定的路径}}/views/layouts/”中查找。
因此,如果您有其他目录结构或其他原因要覆盖它,可以使用我示例中的代码行。只需确保在实例化exphbs之前执行此操作。
如果您正在使用其他模块(我不确定有哪些),很可能它们具有类似的设置,可以通过一些技巧进行覆盖(只需在文件内容上运行“find”以查找“views/layouts/”即可)。
请注意,我将“app.set(“views”,__dirname);”保留为原样,以便在服务器目录中的任何位置保存模板,并像下面这样呈现它们:
res.render("moduleName/templateName");
更新到v2.0.1之后,上述方法将不再适用。相反,您可以将默认目录作为参数传递如下:
var hbs = exphbs.create({
layoutsDir: 'app/server/',
...