2013-11-26 38 views
0

我正在使用expressjs开发对现有应用程序的扩展。根据需求我需要做服务器端渲染。我们的API服务器运行在JAVA上。处理express/node中的模板数据

在我的快车应用程序中,我将不得不在呈现服务器端调用JAVA服务器的同时呈现页面。例如,我打算调用getCategories,getVendors,getReviews等API来获取我需要传递给渲染模板的数据。

什么是实现这一目标的好方法?我的意思是将所有这些打包成一个对象并传递给res.render()方法。你能否给我提供一些基本的例子?我想我需要创建一个模块来完成所有这些工作,并返回一些漂亮的对象...

互联网上的所有例子都显示类似res.render('index', { data: 'someData'})的东西,但是在这种情况下,数据是自举的。我需要一个数据与几个API调用进行编译,然后传递给渲染方法。

谢谢!

回答

0

这实际上取决于您是要调用Java API服务器端还是客户端。

如果是服务器端,包含res.render()的快速路由将需要在呈现页面之前从Java中收集它需要的所有信息。如果你的API速度很慢,页面加载速度会很慢。如果可能的话,使用类似async.parallel的东西来避免阻塞。

您的代码示例是正确的。 res.render('index', { foo: 'bar'}) 这会将foo变量添加到视图的根范围。您如何构建数据结构完全取决于您。我建议使用async.parallel和/或async.series来整理所有数据。如果它们都是完全独立的,请并行运行它们。

// an example of how to run each in parallel and then render the view. 
var getCategories = function(done) { 
    // get something 
    done(); 
}; 
var data = {}; 
async.parallel([ 
    getCategories, // <-- adds to the data structure 
    getVendors, 
    getReviews 
], function(err) { 
    res.render('index', { data: data }); 
}); 

您的其他选择是使用express来渲染基本页面并使用类似jQuery的命令来打击Java API并更新相关页面片段。

+0

太棒了!感谢您的回答,正是我所期待的! –