我来自面向对象的背景,以下是我将理想的语法用于将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充满了很多模块来解决很多问题。虽然我在试图模仿上述内容时最终追逐了我的尾巴。
编辑:
从数据存储中检索模型。例如,使用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模块会给我这个吗?
答案 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
});
我认为这与您的代码非常相似,我认为它的工作方式与预期相符。
我的答案可能会像: