如何在Node JS中的Template文字内部调用函数

时间:2020-09-24 20:43:29

标签: javascript node.js express ejs template-literals

我正在使用node js表达。我试图在模板文字中调用一个函数。 我制作了一个模块,并导入了主文件,然后将该函数添加到app.locals并在我的视图中进行了正常访问。但是,当我尝试在模板文字以及公共文件中使用它时,出现错误“ currencyToWords未定义”。

我认为在公共文件中这是有道理的,因为我将公共文件夹设为静态。 但是在我看来,这很奇怪,因为当我在html中使用它时,它可以工作,但是当我在模板文字中使用它时,它会出错。

我想在模板文字中使用currencyToWords函数来更改响应。
我有一个解决方案,我可以在公用文件夹中创建文件,然后在该文件中的脚本中添加功能,然后在页脚中导入,但是我不想这样做。
有人可以帮助我解决问题吗?

我的应用程序结构 app stucture module.exports = {currencyConverter}

在app.js中 app.js是我创建服务器的主要文件

var { currencyToWords } = require('./config/functions');
app.locals.currencyToWords = currencyToWords;

通过添加本地人,我可以在任何地方的应用程序中访问它

此代码有效:

 <div class="fix pull_right">
  <h3><%= currencyToWords(property.propertyDetails.price)%></h3>
 </div>

这不起作用

var a =`
  <p>${currencyToWords(property.propertyDetails.price)}</p>
`;

上面的代码是相同的,但唯一的区别是第一个是在ejs标记中使用,第二个是在ejs和模板文字中使用。

以下是Express中有关app.locals的文档 app.locals app.locals对象具有作为应用程序内局部变量的属性。

console.dir(app.locals.title)
// => 'My App'

console.dir(app.locals.email)
// => 'me@myapp.com'

设置后,app.locals属性的值将在应用程序的整个生命周期中保持不变,而res.locals属性仅在请求的生命周期内有效。

您可以在应用程序内呈现的模板中访问局部变量。 这对于为模板提供辅助功能以及应用程序级数据很有用。本地变量可通过req.app.locals在中间件中使用(请参见req.app)

app.locals.title = 'My App'
app.locals.strftime = require('strftime')
app.locals.email = 'me@myapp.com'

0 个答案:

没有答案