在express.js视图中包含函数和类

我是一个Java程序员,将Java SE / Swing应用程序移植到Web应用程序。 我一直在试用node.js和express.js面向客户端的应用程序。

我想在node.js应用程序级别定义函数,并在节点应用程序中提供可用于查看的方法和属性。 我主要关心数据build模。 我想在应用程序级别定义数据模型,并让视图访问模型的属性和方法。

我调查了express.js和node.js文档,在我看来,包括('require')可以在应用程序级别完成,但他们不传播到视图级别。

我错过了什么吗? 也许这是关于JavaScript或Node的基本问题,我不明白…

请注意,expressjs并不是一个真正的MVC框架,因此,它的“路线”,“应用程序”和“视图”的概念相当宽松,并且devise为不易select和更改。

也就是说,一个expressjs视图通常只是一个由路由器/控制器提供的HTML模板(由EJS或Handlebars支持 ),并给定一个Javascript对象来填充它自己。 许多Javascript模板引擎将自己描述为“无逻辑模板” 。 正因为如此,缺less函数/类(注意,Node / Javascript甚至没有真正的类的概念)。 一个build议可能是添加一个间接的级别,其中你有一个脚本,将您的模型,并将其打包到一个标准的对象格式,所有您的模板知道。

还有一点要注意:

Node中的require调用可能最类似于引用静态Java类。 (如果我可以find我正在考虑的引用,我将添加它,但基本上,节点加载每个脚本一次,然后返回每个后续require调用加载副本编辑: 这里是,node.Module源代码 )

编辑:一个映射脚本的例子

请注意,到目前为止,Node中没有很强的模式,所以人们似乎正在做对他们有意义的事情。 这个例子绝不是“标准的”节点实践。

model-view.js

 module.exports.map = function(birthyear) { return { "birthYear": birthYear, "age": getAge(birthYear) } } //some function on the "view" function getAge(birthYear) { return (new Date()).getFullYear() - birthYear; } 

app.js

 var transform = require('./model-transform'); app.get('/age/:user', function(req, res) { db.doSomeDatabaseRequestToGetTheUsersBirthYear(req.params.user, function(birthYear) { res.render('index', transform.map(birthYear)); }); }); 

模板(我喜欢胡须模板,但你可以使用任何)

 <html> <body> You were born in {{ birthYear }}<br> You are probably {{ age }} years old. </body> </html>