Как я могу получить значение из запроса http?НОДЕЙС + ЭКСПРЕСС - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно получить координату, которую запрос отправляет мне обратно.

Запрос правильный, на body теле я могу получить доступ к лат и лон. Дело в том, что запрос находится внутри другой функции с именем latlongfunc. Как я могу получить доступ к телу вне запроса вызова?

Что я уже пробовал: создайте variable перед вызовом, затем измените его внутри вызова и, наконец, верните его в конце функции latlongfunc. Это не работает ...

ВАЖНО: Запрос работает, проблема в том, как получить доступ к телу вне запроса.

const request = require('request')
console.log("Here.")


var latlongfunc = async (fullAddress) => {

  var options = {
    url: `https://nominatim.openstreetmap.org/search/${fullAddress}`,
    json: true, // JSON strigifies the body automatically
    headers: {
      'User-Agent': 'request'
    }
  };

  request(options, (err, res, body) => {
    if(body.length > 0){
      // A body was received
      var coordinate = {
        lat: body[0].lat,
        lon: body[0].lon
      }

      return coordinate
    }else{
      console.log("Something wrong happened")

    }
  })


}

module.exports = {
  latlongfunc
};

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Я предлагаю использовать пакет request-promise, который обертывает request с Promise

const rp = require('request-promise')

const request = require('request')

var latlongfunc = async (fullAddress) => {
  let coordinate
  try {
    var options = {
    url: `https://nominatim.openstreetmap.org/search/${fullAddress}`,
    json: true, // JSON strigifies the body automatically
    headers: {
      'User-Agent': 'request'
    }
  };

  const body = await rp(options)
  var coordinate = {
    lat: body[0].lat,
    lon: body[0].lon
  } catch (e) {
    // handle error or throw
    console.log("Something wrong happened")
  }
  return coordinate
}
0 голосов
/ 10 апреля 2019

просто оберните ваш код в обещание, которое разрешается с необходимой вам координатой.

const request = require('request')
console.log("Here.")


var latlongfunc = (fullAddress) => {

  var options = {
    url: `https://nominatim.openstreetmap.org/search/${fullAddress}`,
    json: true, // JSON strigifies the body automatically
    headers: {
      'User-Agent': 'request'
    }
  };

  return new Promise((resolve, reject) => {
    request(options, (err, res, body) => {
      if(err) {
        return reject(err);
      }

      if(body.length > 0){
        // A body was received
        var coordinate = {
          lat: body[0].lat,
          lon: body[0].lon
        }

        resolve(coordinate);
      }else{
        console.log("Something wrong happened")

      }
    })
  })

}

module.exports = {
  latlongfunc
};


const latlongfunc = require("latlongfunc");
latlongfunc.then(coordinate => console.log(coordinate));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...