在 Sails JS 中使用 underscore/lodash 作为模板引擎

Posted

技术标签:

【中文标题】在 Sails JS 中使用 underscore/lodash 作为模板引擎【英文标题】:Using underscore/lodash as template engine in Sails JS 【发布时间】:2014-01-06 11:43:30 【问题描述】:

我有一个单页网络应用程序,它在客户端使用主干,在服务器上使用节点(Sails)。

我目前在客户端使用lodash.underscore作为模板引擎,在服务端使用kiwi。

我希望通过渐进增强来实现 pushstate。即客户端和服务器将共享相同的模板文件。

这意味着他们需要使用相同的模板引擎;我决定使用下划线/lodash。

在 Sails config\views.js 中,这意味着您可以使用下划线作为模板引擎。问题是我无法弄清楚如何做到这一点。我已经将它包含在我的 package.json 中并设置了

'engine': 'underscore'

然后在启动我的应用程序时出现错误 - “Function.app.engine 需要回调函数”

如果我将引擎设置为“kiwi”、“jade”、“ejs”等,那么它会起作用。

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

我不确定我是否完全理解您的要求,但是,我在服务器端视图中使用了具有以下配置的下划线模板:

config/views 中,我将引擎设置为 ejs:

engine: 'ejs',

在我的Gruntfile.js 中我已经设置:

var templateFilesToInject = [
    'linker/**/*.ejs'
];

【讨论】:

服务器端视图位于 /views 中,客户端模板位于 /assets/templates 中。我想避免重复代码,所以希望从客户端模板构建服务器端视图。这将允许我启用 pushState。为此,我需要视图和模板使用相同的“语言”并使用相同的语法,而目前它们不是。我似乎在这两点上都有问题 - 从 /views 引用资产/模板并获得标准语法【参考方案2】:

Consolidate.js 从 version 0.3.1 开始使用 support Underscore as an engine,从 version 0.10.0 开始使用 Lodash。

Sails.js supports all of the view engines compatible with Express via Consolidate,但第一个包含 Consolidate 作为直接依赖项的 Sails 版本是 only 0.12.0-rc2。我不确定 Sails 在此之前是如何管理其他模板引擎的,但 documentation suggests that Underscore has been supported as a view engine since 0.10.0.

您应该验证您使用的 Sails 版本是否支持 Underscore 作为视图引擎,并在尝试使用之前确保您npm i --save underscore

【讨论】:

以上是关于在 Sails JS 中使用 underscore/lodash 作为模板引擎的主要内容,如果未能解决你的问题,请参考以下文章

sails.js 和多个参数

在sails.js 中覆盖CRUD 蓝图

ZeroMQ 和 Sails.js

Underscore.js:使用在对象中找到的键从对象列表中创建映射

如何在sails.js 中启用http/2

如何使用 underscore.js 在 Array 中找到对象的索引?