【问题标题】:Combining two or more models in json response, Node Express在 json 响应中结合两个或多个模型,Node Express
【发布时间】:2013-10-31 21:03:49
【问题描述】:

我来自面向对象的背景,以下是我将 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 方式并了解如何以功能/模块化的方式解决我的问题(即上述问题)?

编辑:

模型是从数据存储中检索的。例如,使用 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 模块?

【问题讨论】:

    标签: javascript node.js asynchronous express callback


    【解决方案1】:

    我可能会误会,但是:

    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. 不适用
    3. 可能!这很正常,但你似乎应付得很好。 :)

    【讨论】:

    • 啊,model1和model2是从数据库中检索出来的。例如 Boat.findOne(function(model1){ //do something with model }。我会更新我的问题。
    猜你喜欢
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多