2016-11-25 68 views
1

我目前正在为我的机构开发一个应用程序,并遇到以下问题。 我想让用户检查数据库中的一些东西(目前使用的是Firebase)。由于我必须从外部服务器检查某些内容,因此我设置了一个node.js服务器来发送更改通知。我想将此服务器用作Firebase和应用程序之间的链接,以满足更复杂的要求。如何使Async API有效?

对于我的节点服务器和应用程序之间的门,我用快递...... 我设置基本的东西,但下面的问题发生,我不知道如何解决这个问题?

例如,我有API可以登录到用户帐户,所以我向服务器发送了一个包含用户名和认证令牌的请求。但现在问题发生了。由于服务器必须从Firebase进行检查,因此我无法对该值进行任何操作,因为我不知道该何时获得该值,并且我也不知道如何使用异步操作。

这将真正帮助我,如果有人知道如何做到这一点。如果这上的场景是在这里混淆一​​件简单的事情:

我怎么能当我得到一个请求(快递),从火力地堡送价值......,只是发送请求时已经被加载的价值?

我愿意在必要时修改数据库,例如MongoDB的或东西,如果这有助于。

+0

您应该检查从上面的链接的答案。基本概念是快递服务器等待来自Firebase的响应。当你从firebase获得响应时,express服务器将数据发送回客户端。 – iKoala

+0

感谢您的答复已签出的链接,我会考虑它:) – Mathew

回答

1

到这样的问题,一般的解决方案是这样的:

app.post('/login', function (req, res) { 
    makeAsyncCall('some arguments...', function (err, data) { 
    if (err) { 
     // you have error, send an appropriate error 
     // to the client with `res.send` 
    } else { 
     // you have `data`, check it and use `res.send` 
     // to send response to the client 
    } 
    }); 
}); 

所以,你的处理程序里面,你运行一个异步函数,它接受一个回调,并在回调创建你原来的HTTP响应请求。

makeAsyncCall可以是另一个HTTP请求到一些其他的服务器或数据库查询或其他任何东西。这可能是连超时:

app.get('/delay', function (req, res) { 
    setTimeout(function() { 
    req.send('Done'); 
    }); 
}, 3000); 

在内的回调,你仍然可以访问,其中定义它们的外部函数的参数 - 像reqres对象明确。

+0

感谢您的快速响应:)我会检查是否正常工作 – Mathew

+0

是现在工作的感谢:) – Mathew

+0

嘿:)只是想知道,如果那里有一个类似的技巧对于返回函数...我在函数中拷贝了与api相同的版本,但是在这里我得到一个未定义的错误... – Mathew