当我执行本地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请求中,然后再将其传递给索引?
谢谢!
答案 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);
}
}
注意到最大的不同吗?没有回调,您将获得异步代码的所有相同好处,并获得以同步方式编写代码的好处。