2013-10-22 30 views
0

我來自一個面向對象的背景,下面將是我與快遞JSON響應兩個或兩個以上的模型的屬性,結合理想的語法:組合兩個或多個模型的JSON響應,節點快速

//Verbose 
app.get('/boat_house', function(req, res){ 

    var boat = Model1; 
    var house = Model2; 

    var bColour = boat.colour; 
    var hWidth = house.width; 

    res.jsonp({ 
    boatColour: bColour, 
    houseWidth: hWidth, 
    }); 

}); 

//Compact 
app.get('/boat_house', function(req, res){ 

    res.jsonp({ 
    boatColour: Model1.colour, 
    houseWidth: Model2.width, 
    }); 

}); 

從我所看到的,這是不可能的。我已經研究過光纖和異步,並且我知道Node有很多模塊可以解決許多問題。儘管我試圖模仿上述情況,但最終還是追逐了我的尾巴。

  1. 如何將Model1和Model2的屬性組合到res.jsonp中?
  2. 什麼反回調地獄模塊最好模擬上述語法?
  3. 我錯過了一個頓悟嗎?我是否需要放棄OO方式,並以功能/模塊化的方式瞭解如何解決我的問題(即上述問題)?

編輯:

該模型從數據存儲檢索。

Boat.findOne(function(boat){ 
    //do something with boat 
}); 

我也碰到過這種similar question,回答這表明使用async.parallel的:例如與貓鼬API,你會通過檢索型號1。我更喜歡類似於以下語法:

var when = require('HypotheticalPromiseModule').when; 

var boat = Model1.getAsync(); 
var house = Model2.getAsync(); 

when(boat, house).then(function() { 
    res.jsonp({ ... }); 
}); 

是否有一個npm模塊在那裏會給我這個?

回答

0

我可能會被誤解,但是:

var express = require('express'); 
var app = express(); 

var M1 = { colour: 'blue' }; 
var M2 = { width: 100 }; 

app.get('/test', function(req,res,next) { 
    res.jsonp({ foo: M1.colour, bar: M2.width }); 
}); 

app.listen(3003); 

測試它:

$ curl localhost:3003/test 
{ 
    "foo": "blue", 
    "bar": 100 
} 
$ curl localhost:3003/test?callback=func 
typeof func === 'function' && func({ 
    "foo": "blue", 
    "bar": 100 
}); 

我覺得這是非常相似,你的代碼,我想說它就像預期。然後

我的答案很可能會去是這樣的:

  1. 就用這種方式,你覺得
  2. N/A
  3. 可能!這很正常,但你似乎應付得很好。 :)
+0

啊,model1和model2從數據庫中檢索。例如Boat.findOne(function(model1){//用模型做一些事情},我會更新我的問題。 – waigani