Javascript Node.js`request.get`:将主体存储在变量中
我是Node.js的新手,很抱歉这可能是个愚蠢的问题 这是我的密码: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 = ''
#!/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
执行某些操作,则只需在请求完成后执行。