Задать вопрос
@ilyakmet

Как реализовать нормальный GET в NodeJS?

Перепробовал кучу различных модулей (request, http и тд) для запросов, но фундаментально остается одна проблема, не могу вернуть данные из функции, т е запрос успешно проходит возвращается ответ а вытащить его не могу (return). Сам пишу на NodeJS всего 3 дня. Там что то связано с асинхронностью и тд. Покажите пожалуйста полный пример GET запроса, который позволит работать с ответом в основном теле кода.
  • Вопрос задан
  • 184 просмотра
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
megafax
@megafax
web-программист
Самый простой
request.get({
	            url: someurl
            }, (err, res, body) => {
	if (err || !res || !res.statusCode || Math.floor(res.statusCode / 100) !== 2) {
		return console.error(err);
	}
	asyncFunc(body); // Тут отдаем ответ для другой ф-ии
});


Заворачиваем в промис
function getReq(someurl) {
	return new Promise((response, reject) => {
		                   request.get({
			                               url: someurl
		                               }, (err, res, body) => {
			                   if (err || !res || !res.statusCode || Math.floor(res.statusCode / 100) !== 2) {
				                   return reject(err);
			                   }
			                   response(body); // Тут отдаем ответ для промиса далее
		                   });
	                   }
	);
}

getReq('https://ya.ru')
	.then((body) => {
		console.log(body);
	})
	.catch((err) => console.error(err));


На async / await уже дальше не составит труда переделать
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Abcdefgk
require('request')
      .get('https://toster.ru/q/488141')
      .on('error', function(err) {
        console.error(err);
      })
      .on('response', function(res) {
        console.log(res.statusCode);
        console.log(res.headers['content-type']);
      })
      .pipe(require('fs').createWriteStream('toster.html'))
      .on('finish', function() {
        console.log('OK');
          var file = require('fs').readFileSync('toster.html');
          console.log(file);
      });
Ответ написан
Комментировать
Torin_Asakura
@Torin_Asakura
Lead Architect
Почитай про callback, async (), async await, всё сразу станет понятно
Ответ написан
Комментировать
@Interface
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект