0

我来自面向对象的背景,以下是我将 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
});

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

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

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

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

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

4

1 回答 1

0

I might be misunderstanding, but:

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);

Testing it:

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

I think this is quite similar to your code, and I would say it works like expected.

My answers would then probably go something like:

  1. Just the way you think
  2. N/A
  3. Probably! That's normal, but you seem to be coping just fine. :)
于 2013-10-22T23:22:32.867 回答