我正在尝试在Node中构建API端点。
这将从外部API获取数据,并通过端点推送结果。此端点稍后将在客户端使用。
API调用有一些逻辑,我想将它作为一个单独的组件使用,而不是在route.get(..)
包含60行代码
鉴于这是一个异步问题,如何将apiRequestModule.js中的asyncRequestResult
发送到routes.js,以便我可以在routes.js中执行res.send(asyncRequestResult)
?
答案 0 :(得分:1)
您在模块中创建一个正确返回异步结果的函数。您可以使用回调函数作为参数或通过返回promise来实现。只需查看node.js库中的每个异步函数,以获取有关如何返回异步结果的示例。
然后,您的路由调用异步函数,并在返回结果时,然后将其作为对请求的响应发送。
使用回叫
app.get('/somasyncrequest', function(req, res) {
myOwnModuleCall(someArg, function(err, result) {
if (err) {
console.log(err);
res.status(500).end();
} else {
res.send(result);
}
});
});
使用承诺
app.get('/somasyncrequest', function(req, res) {
myOwnModuleCall(someArg).then(function(result) {
res.send(result);
}, function(err) {
console.log(err);
res.status(500).end();
});
});
然后,在myOwnModuleCall()
的实现中,当异步响应完成时,您可以调用传入的回调(第一个示例)或解析/拒绝promise(第二个示例)。