EJS 包含在单独的 ejs 文件中定义的函数

Posted

技术标签:

【中文标题】EJS 包含在单独的 ejs 文件中定义的函数【英文标题】:EJS include functions defined in a separate ejs file 【发布时间】:2017-10-23 19:45:55 【问题描述】:

我正在尝试包含一个 ejs 文件,其中包含用于设置我的视图的函数。这些函数被定义为使用助手。我试过使用:

<% include helpers.ejs %>

但是当我尝试使用这个文件中的函数时:

<% module_start('$body', [name:'display',value:'block'], 'body'); %>

我得到错误:

Reference Error: module_start is not defined

当我将代码从“helpers.ejs”复制到我的原始视图文件“test.ejs”时,它按预期工作。我已经经历了几个答案, 在这种情况下,我仍然很困惑我做错了什么。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

经过几个小时的艰苦尝试,我找到了一个行之有效的解决方案。解决方案借自:

EJS Functions

查看此代码中提供的解决方案,我将“helpers.ejs”更新为“helpers.js”。在此之后,我将“helpers.js”中的导出函数添加到 ejs 渲染上下文对象中:

const ejs_helpers = require('path/to/helpers.js');

...

ejs.renderFile('filename',  helpers:ejs_helpers, ..., (err,data)=>);

在ejs视图文件中:

<%- helpers.function_name(params); %>

这极大地改变了我最初解决问题的方式。使用普通的 ejs 帮助文件,这些函数在控制流语句之间包含 html。在此处介绍的情况下,函数返回纯字符串。注意带有“Scriptlet”标签的“-”。

希望这对某人有所帮助。

【讨论】:

所以如果我调用像//New - show form to create new ship router.get("/new", middleware.isLoggedIn, function(req, res) res.render("ships/new"); ); 这样的路由现在我需要使用像//New - show form to create new ship router.get("/new", middleware.isLoggedIn, function(req, res) res.render("ships/new", jsfunctions: myjsfile); ); 这样的东西 如果你只有一个函数并且没有参数,那么你需要使用像ejs.renderFile('filename', helpers:ejs_helpers);这样的行???

以上是关于EJS 包含在单独的 ejs 文件中定义的函数的主要内容,如果未能解决你的问题,请参考以下文章

包含对每个不同视图文件进行部分修改的常见ejs视图文件?

使用 Notepad++ 在 HTML 文件中突出显示 EJS 语法

在带有辅助函数的 ejs 中使用 .then 返回 [ object promise ]

EJS 包含不是函数错误

有啥办法可以将ejs文件“转换”为jade吗?

从 API 获取数据,然后将其发送到 EJS 文件