Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从helpers内部呼叫helpers_Node.js_Helper_Express - Fatal编程技术网

Node.js 从helpers内部呼叫helpers

Node.js 从helpers内部呼叫helpers,node.js,helper,express,Node.js,Helper,Express,我正在使用Expressjs开发这个web应用程序,我觉得需要微软的Razor视图引擎提供的功能 Razor允许一个人从其他助手中呼叫助手。 在Expressjs中,当从视图调用帮助程序时,帮助程序的作用域不会扩展到帮助程序本身 这有解决办法吗?我希望不必将助手作为参数传递给视图,也不必需要助手的文件 提前谢谢 例如: 我有 app.helpers({ TextBoxHelper: require('./TextBox.js') }); app.helpers({ CharCounter :

我正在使用Expressjs开发这个web应用程序,我觉得需要微软的Razor视图引擎提供的功能

Razor允许一个人从其他助手中呼叫助手。 在Expressjs中,当从视图调用帮助程序时,帮助程序的作用域不会扩展到帮助程序本身

这有解决办法吗?我希望不必将助手作为参数传递给视图,也不必需要助手的文件

提前谢谢

例如:

我有

app.helpers({ TextBoxHelper: require('./TextBox.js') });
app.helpers({ CharCounter  : require('./CharCounter.js'  ) });
在我的服务器上。渲染视图时,我使用jshtml视图引擎并调用助手,我只需执行以下操作:

@TextBoxHelper()    //I can do this because all helpers are present in this scope
调用帮助程序时,它将退出视图范围,并且将无法访问那里的其他帮助程序


现在,我想让这个助手文本框调用CharCounter。第二个帮助程序应该由其他几个帮助程序调用,因此,如果我可以从helpers.js文件调用它,而不需要脚本,或者将其作为参数发送,那就太好了。

我将把所有帮助程序捆绑到一个对象中。这样你就可以使用这个。someHelper


如果这不是您想要的,您可以随时在Javascript中轻松更改它。

您能举个例子说明您正在尝试做什么吗?还要注意的是,在3.x中,助手和动态工具被删除了。我在问题的底部添加了一个例子,Pickels。当你说3.x版时,你是指Express吗?o、 OI mean Express.js 3.x。在新版本中,您只有res.locals。因此,如果您想要3.x中的帮助程序,只需为全局帮助程序执行app.locals.myHelper=function{},或为res.locals.myHelper=function{}路由特定的帮助程序。从某种程度上说,这些帮助程序已经打包并可用于视图引擎。问题是,如果我在给定时间在其中一个助手内工作,我就无法访问其他助手。当然,我可以将helpers对象作为参数传递给我正在调用的helper,它可以访问它们。我只是想知道是否有一种更自然的方式来做这件事。
var helpers = {
  first: function () {
    console.log('first');
    helpers.second();
  },

  second: function () {
    console.log('second');
  }
};


helpers.first();