nodejs получает тело изнутри области запроса - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в nodejs и JavaScript в целом.Я считаю, что это проблема с объемом, который я не понимаю.

Учитывая этот пример: ... ...

if (url == '/'){
  var request = require('request');
  var body_text = ""; 
  request('http://www.google.com', function (error, response, body) {
    console.log('error:', error); 
    console.log('statusCode:', response && response.statusCode);  
    console.log('body:', body);
    body_text=body; 
  });
  console.log('This is the body:', body_text)
  //I need the value of body returned from the request here.. 
}

//OUTPUT 
This is the body: undefined

Мне нужно иметь возможность получить ответное тело, а затем выполнить некоторые манипуляции, а я не хочу делать всереализация внутри функции запроса.Конечно, если я перемещу строку журнала в:

request( function { //here  })  

Это работает.Но мне нужно каким-то образом вернуть тело вне запроса.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 30 мая 2018

Вы не можете сделать это с обратными вызовами, потому что это будет работать асинхронно.

Работа с обратными вызовами является нормой в JS.Но вы можете добиться большего успеха с Promises.

Вы можете использовать request-обещание-native , чтобы делать то, что вы хотите, с помощью async / await.

async function requestFromClient(req, res) {
    const request = require('request-promise-native');
    const body_text = await request('http://www.google.com').catch((err) => {
      // always use catches to log errors or you will be lost
    })

    if (!body_text) {
      // sometimes you won't have a body and one of this case is when you get a request error
    }
    console.log('This is the body:', body_text)
    //I need the value of body returned from the request here.. 
}

Как вывидите, вы всегда должны быть в области действия функции, чтобы использовать асинхронное / ожидающее в обещаниях.

Рекомендации:

  1. JS правильный путь
  2. ES6 Fetures
  3. JS чистое кодирование
  4. Дополнительные рекомендации ...
  5. Использование обещаний
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...