nodejs从请求范围内检索body

时间:2018-05-29 21:38:02

标签: javascript node.js request

我一般都是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 :(得分:0)

你不能用回调来做到这一点,因为这将异步工作。

使用回调在JS中是很正常的。但你可以用Promises做得更好。

您可以使用request-promise-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.. 
}

如您所见,您始终必须在函数范围内使用promises中的async / await。

建议:

  1. JS the right way
  2. ES6 Fetures
  3. JS clean coding
  4. More best practices...
  5. Using promises