javascript - 如何使异步 API 工作?

标签 javascript node.js express firebase firebase-realtime-database

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

对于我的 Node 服务器和应用程序之间的网关,我使用了 Express... 我设置了基本的东西,但出现了以下问题,我不知道如何解决这个问题...

例如,我打开 API 来登录用户帐户,因此我向服务器发送包含用户名和身份验证 token 的请求。但现在问题出现了。由于服务器必须从 Firebase 检查它,因此我无法对该值执行任何操作,因为我不知道何时获得它,而且我也不知道如何使用异步执行此操作。

如果有人知道如何做到这一点,那对我真的很有帮助。如果上面的场景让这里的一个简单的事情变得困惑:

当我收到请求(快速)时,如何从 Firebase 发送一个值...并在该值已加载时发送一个请求?

如有必要,我愿意更改数据库,例如更改为 MongoDB 或其他有帮助的数据库。

最佳答案

此类问题的一般解决方案如下:

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 对象。

关于javascript - 如何使异步 API 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805654/

相关文章:

reactjs - 使用 create-react-app 获取开放图元数据

javascript - 使用 JavaScript React 中的扩展运算符将数组中的元素替换为一行

javascript - 如何使用AngularJS中的URL下载PDF文件

node.js - 自动更新 NodeJS 应用程序中的 package.json

javascript - 如何使用 Nodejs、Expressjs 和 bluebird 调用第二个 "external"函数

node.js - 如何添加对模型的引用?

javascript - 使用 jQuery 编辑innerHTML()

javascript - float 条形图刻度线不显示

node.js - 如何调试 npm 安装执行

node.js - 在 Express.js 中重定向后调用下一个中间件