本地获取请求中的节点请求外部API

时间:2018-06-29 09:20:03

标签: javascript node.js api asynchronous

当我执行本地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请求中,然后再将其传递给索引?

谢谢!

2 个答案:

答案 0 :(得分: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 });

答案 1 :(得分:1)

回调可能很难理解,而且您描述的问题并不少见(甚至有一个名称-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);
  }
}

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