2013-11-26 95 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

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