从模块获取异步数据并通过路由的端点发送

时间:2016-05-04 16:56:40

标签: node.js express asynchronous routing

我正在尝试在Node中构建API端点。

这将从外部API获取数据,并通过端点推送结果。此端点稍后将在客户端使用。

API调用有一些逻辑,我想将它作为一个单独的组件使用,而不是在route.get(..)包含60行代码

鉴于这是一个异步问题,如何将apiRequestModule.js中的asyncRequestResult发送到routes.js,以便我可以在routes.js中执行res.send(asyncRequestResult)

1 个答案:

答案 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(第二个示例)。