【问题标题】:Node request external API within local get request本地获取请求中的节点请求外部 API
【发布时间】:2018-12-08 10:50:02
【问题描述】:

当我执行本地 GET 请求时,我尝试提供外部 API 调用的响应,但不知道如何让它工作。

我现在的代码是:

app.get('/', function(req, res){
  request.post('http://data.fixer.io/api/latest?access_key=' + apikey + 
'&symbols=gbp', function(err, res, body) {
    console.log(body)
  })
  res.render('index')
})

我在回调和异步编程方面的知识和经验有限,但是如何将请求 POST 的响应传递到 GET 请求中,然后将其传递给索引?

谢谢!

【问题讨论】:

    标签: javascript node.js api asynchronous


    【解决方案1】:

    您可以在 Express 中链接调用,因此在 GET 请求中调用外部服务非常容易,例如

    app.get('/', function(req, res){
        request.post('http://data.fixer.io/api/latest?access_key=' + apikey + '&symbols=gbp', function(err, response, body) {
        console.log(body)
        res.send(body);
      })
    })
    

    在这种情况下,我们从 POST 发回原始响应,很容易将其包装在另一个对象中,例如

    res.send( { status: 'ok', post_result: body });
    

    【讨论】:

    • 谢谢,搞定了,只需要将帖子请求中的资源重命名为响应
    【解决方案2】:

    回调可能很难理解,而且您描述的问题并不少见(它甚至有一个名称 - Callback Hell)。 Node 引入 async / await 语法的部分原因 - 这是你的代码在这种风格中的等价物

    app.get('/', async (req, res, next) => {
      try {
        const uri = `http://data.fixer.io/api/latest?access_key=${apikey}&symbols=gbp`;
        const data = await request.post(uri);
        return res.render('index', { data }); // or pass whatever you need from `data` into the view
      } catch (e) {
        return next(e);
      }
    }
    

    注意到最大的不同了吗?没有回调,您可以获得与异步代码相同的所有好处,并以同步方式编写代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      相关资源
      最近更新 更多