在json响应中组合两个或更多模型,Node Express

时间:2013-10-22 20:05:00

标签: javascript node.js asynchronous express callback

我来自面向对象的背景,以下是我将理想的语法用于将json响应中两个或多个模型的属性与Express结合起来:

//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方式并了解如何以功能/模块化方式解决我的问题(即上面的问题)?
  4. 编辑:

    从数据存储中检索模型。例如,使用mongoose API,您将通过以下方式检索Model1:

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

    我遇到了这个similar question,其答案建议使用async.parallel。我更喜欢类似于以下语法:

    var when = require('HypotheticalPromiseModule').when;
    
    var boat = Model1.getAsync();
    var house = Model2.getAsync();
    
    when(boat, house).then(function() {
       res.jsonp({ ... });
    });
    

    那里有一个npm模块会给我这个吗?

1 个答案:

答案 0 :(得分: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. 可能!这是正常的,但你似乎应对得很好。 :)