Node.js`request.get`:将body存储在变量中

时间:2013-11-01 17:01:14

标签: 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 = ''

    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(),但似乎_body仍为空字符串。

...如何从HTTP响应中存储HTML?!?

1 个答案:

答案 0 :(得分:2)

您似乎在请求完成之前返回_body

请求不是同步的,因此您几乎肯定会想要定义回调。在纯JavaScript中,那将是:

fetchDepartments('https://ntst.umd.edu/soc', function (err, body) {
    console.log(body);
});

当前做的是:

  1. _body初始化为''
  2. 创建(但不执行!)getHandler
  3. 发起请求
  4. 返回(仍为空)_body
  5. 记录(空)_body
  6. 稍后:请求完成,调用getHandler
  7. getHandler()更新_body
  8. 您需要做的是使fetchDepartments接受回调函数,以便任何代码进程_body都可以等到请求完成。