node.js - Express 中的 app.set 和 app.engine

标签 node.js express handlebars.js template-engine

我正在关注 Node.js tutorial .

我不确定的两行是:

app.set('view engine', 'html');
app.engine('html', hbs.__express);

我查看了documentation对于 app.set 它只告诉我:

Assigns setting name to value.

但我的问题是使用它的相关性是什么。我用谷歌搜索了它,在任何使用 app.engine 的地方 app.set 之前都被调用过。

让我知道在 app.engine 之前使用 app.set 的意义。

编辑

我找到了以下行,但由于我是第一次使用模板引擎,所以我仍然不清楚:

But we can tell Express to treat HTML files as dynamic by using the view engine directive, you see above.

最佳答案

第一行,app.set 告诉 Express 使用哪个模板引擎:在本例中,html。这要求安装一个使用该名称的模板引擎,并且该模板引擎负责处理具有 .html 扩展名的文件。

如果您使用的是 ejs,例如,这一行就足够了(尽管您通常还会第二次调用 app.set 来定义要查看的目录查看文件):

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

现在,假设您想为 another 文件扩展名使用模板引擎,例如您希望 ejs 引擎不仅可以处理 .ejs 文件,还可以处理 .html 文件。

在这种情况下,您可以使用第二行,它告诉 Express 对于扩展名为 html 的文件,您希望调用 hbs.__express 函数来呈现它们(因为实际上没有称为 html 的模板引擎)。这实质上意味着您希望 hbs 引擎呈现 .html 文件。

__express 函数是 Node.js 下模板引擎与 Express 兼容的事实上的标准:这就是它们的渲染函数应该被调用以便 Express 可以轻松找到它(如果它有一个不同的名字,你也可以配置它,但那是另一回事)。

希望这会有所帮助。

关于node.js - Express 中的 app.set 和 app.engine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22954561/

相关文章:

javascript - 如何从 mithril 调用 app.js 中的代码

javascript - 在客户端编译时,Handlebars Uncaught [object Object] 错误

reactjs - React prerender.io fetch 因为谷歌不工作

ember.js - 结合使用grunt Handlebars 和 Ember ,将模板拆分为单独的文件

javascript - 为什么 bindAttr 不适用于数组

javascript - 如何使用 Node.js Cassandra 驱动程序运行连续查询?

javascript - 仅在使用 ECMAScript 模块时,分配给未声明的变量会在 Node 中引发 ReferenceError

javascript - 使用 Handlebars 渲染对象的嵌套数组

node.js - 在类中排序 RESTful API 方法的最佳实践

node.js - 使用 Node.js 进行 api 身份验证