如何在NodeJS中处理第三方API回调?

时间:2014-06-16 08:57:10

标签: node.js asynchronous

问题

客户端调用NodeJS服务器。这会导致进一步调用第三方API。然后,API异步调用回NodeJS服务器。如何让客户端知道异步回调已经完成?

详情

我有一个NodeJS服务器,这两个路由(代码是coffeescript):

app.get '/security/login/application/authorise', -> 
    applicationService.authorise()

app.get '/security/login/application/callback', (req, res) -> 
    applicationService.login req, res

第一条路线由我的AngularJS客户端调用。其目的是授权客户端并允许其启动(用户稍后将登录)。授权过程涉及调用第三方安全API。

安全API执行其操作,然后通过上面显示的/callback路由回调到NodeJS服务器。传递给回调的信息允许进一步调用API,以确定原始授权请求是通过还是失败。

问题是第一次调用/authorise路由的呼叫当然是异步的,因此立即返回给客户端。然后客户端处于不确定状态,不确定NodeJS服务器是否已授权它。

请注意,我不能只嵌套这些调用(imo),因为第一次调用API只会返回200 OK,无论如何。只有在将来某个时候,第三方API通过/callback路由回调到NodeJS服务器才能启动新会话时,此过程才会继续。

选项

看来我有很多不愉快的选择:

  1. 保持异步。将控制权返回给客户端,然后让客户端轮询服务器,可能使用一些独特的临时回调ID来确定回调是否已完成。

  2. Go Synchronous。用某种hacky循环阻止返回。也许承诺可以以某种方式清理它。

  3. 转向双向。使用套接字允许来自服务器的推送通知(但是我必须支持IE8之类的旧浏览器。)

  4. 我想我可能已经过度解决了这个问题,解决方案很可能比我想象的更容易。感谢您的帮助。

0 个答案:

没有答案