// app.js使用t.js控制/t的路由
app.use('/t',require('t'));
在t.js(router)中,要send回tt.topic的值,这里是个JSON
router.get('/:id',function(req, res) {
var api = tt.topic(req.params.id);
res.send(api);
});
在tt.js(model)中,要通过Request获得数据进行过滤返回
tt.topic = function(id) {
var apiurl = 'api url';
var s = req(apiurl,doTheRequest);
function doTheRequest(error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body).result;
console.log(data); // 我这里能拿到数据,但由于是异步的,怎么返回给主进程,进而通过res.send(data)出去?
}
}
return obj; // 这个无效,异步执行去了,这里返回undefined
}
module.exports = tt;
问题都在代码中了,request异步后怎么把值能返回给调用request的函数?进而返回给router,去res.send?
查了API,request没有end这种事件?
上Q.js能起到作用么?
都异步了,就异步到底呗,别老想return了
一般tt.topic里把res传递进去就可以了吧
tt.topic = function(id, res) {
var apiurl = 'api url';
var s = req(apiurl,doTheRequest);
function doTheRequest(error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body).result;
res.send(data);
}
}
}
router.get('/:id',function(req, res) {
tt.topic(req.params.id, res);
});
至于Q.js我没用过,我只用过js原生的promise,node.js上应该可以用node的Promise库
大概把tt.topic改成这样
tt.topic = function(id) {
return new Promise(function(resolve, reject) {
var apiurl = 'api url';
var s = req(apiurl,doTheRequest);
function doTheRequest(error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body).result;
resolve(data);
} else
reject(error);
}
});
}
router.get('/:id',function(req, res) {
tt.topic(req.params.id).then(function(data) {
res.send(data);
});
});