这是基本设置。我正在尝试创建一个简单的中间件组件,它可以让我轻松地将数据从路由直接传递到客户端的 javascript。(非常类似于红宝石中的Gon宝石)。我这样做的方式是拥有一个如下所示的模块:
module.exports = function(){
return function(req,res,next){
var app = req.app;
if(typeof(app) == 'undefined'){
var err = new Error("The JShare module requires express");
next(err);
return;
}
res.jshare = {};
app.dynamicHelpers({
includeJShare: function(req,res){
if(typeof(res.jshare) === 'undefined'){
return "";
}
return function(){
return '<script type="text/javascript">window.jshare=' + JSON.stringify(res.jshare) + '</script>';
}
}
});
next();
};
}
然后,在我的路线中,我可以这样做:
exports.index = function(req, res){
res.jshare.person = {firstName : "Alex"};
res.render('index', { title: 'Express' })
};
最后在 layout.jade 中:
!{includeJShare()}
这样做是在客户端上输出一行 javascript,该行创建了在服务器端创建的确切 JSON 对象。
这是问题;这一切都按预期工作,但作为 Express 和 Node.js 的新手,我只是好奇将属性附加到响应对象上是否可以,或者我只是忽略了这样做有什么问题吗?出于某种原因,它没有通过我的“气味测试”,但我不知道为什么......