Узел запрашивает внешний API в локальном запросе get - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь предоставить ответ на внешний вызов API, когда выполняю локальный запрос GET, но пытаюсь заставить его работать.

Мой код на данный момент:

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 голосов
/ 29 июня 2018

Обратные вызовы могут быть трудны для понимания, и проблема, которую вы описываете, не редкость (у нее даже есть имя - 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);
  }
}

Обратите внимание на одну большую разницу? Нет обратных вызовов, и вы получаете все те же преимущества асинхронного кода с бонусом написания кода в синхронном стиле.

0 голосов
/ 29 июня 2018

Вы можете связывать вызовы в 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 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...