Javascript Node.js`request.get`:将主体存储在变量中

Javascript Node.js`request.get`:将主体存储在变量中,javascript,node.js,http,coffeescript,Javascript,Node.js,Http,Coffeescript,我是Node.js的新手,很抱歉这可能是个愚蠢的问题 这是我的密码: #!/usr/bin/env coffee --bare # 3rd party request = require('request') request.defaults({'encoding': 'utf8'}) module.exports.fetchDepartments = fetchDepartments fetchDepartments = (url) -> _body = ''

我是Node.js的新手,很抱歉这可能是个愚蠢的问题

这是我的密码:

#!/usr/bin/env coffee --bare

#   3rd party
request  = require('request')
request.defaults({'encoding': 'utf8'})

module.exports.fetchDepartments = fetchDepartments

fetchDepartments = (url) ->
    _body = ''

    getHandler = (error, response, body) -> 
        util.debug "HTTP response code: #{response.statusCode}"

        if error
            util.error error
        else    
            _body = body

    request.get(url, getHandler)
    _body

console.log fetchDepartments('https://ntst.umd.edu/soc/')
控制台正在打印对
util.debug()
的调用,但是
\u body
似乎仍然是一个空字符串


…如何存储HTTP响应中的HTML

您似乎在请求完成之前返回了
\u body

请求是不同步的,因此您几乎可以肯定要定义一个回调。在纯JavaScript中,这将是:

fetchDepartments('https://ntst.umd.edu/soc', function (err, body) {
    console.log(body);
});
它目前正在做的是:

  • 将车身初始化为
    '
  • 创建(但不执行!)
    getHandler
  • 启动请求
  • 返回(仍然为空)
    \u正文
  • 记录(空)
    \u正文
  • 稍后:请求完成,调用
    getHandler
  • getHandler()
    更新
    \u body

  • 您需要做的是让
    fetchDepartments
    接受回调函数,这样无论什么代码处理
    \u body
    都可以等待请求完成。

    欢迎来到奇妙的异步世界!“你不能那样做!”斯莱克斯我有种感觉就是这样。那么,我该如何实现我的目标呢?您需要接受回调或返回承诺。否——如果(在
    getHandler()
    的内部)我调用
    console.log(body)
    ,HTML将打印出来。我的问题是我需要存储它,而不是打印它并丢失数据。这是因为
    getHandler
    在请求完成后异步执行。但是,在您当前拥有它的地方,返回值会在发送请求后立即计算。因此,它正在更新
    \u body
    ——就在您已经登录之后。我扩展了我的答案,以包括它当前正在采取的步骤,尝试并帮助解释它当前不起作用的原因。感谢您的澄清!我现在明白出了什么问题。但是,我的目标是能够存储
    body
    。我该怎么做?您已经将结果存储在
    \u body
    中了。问题是在请求完成之前,您正在记录
    \u body
    的值。如果要使用
    \u body
    执行某些操作,则只需在请求完成后执行。