【问题标题】:Is there an node.js http equivalent for XMLHttpRequest.readyState?XMLHttpRequest.readyState 是否有 node.js http 等效项?
【发布时间】:2021-11-04 18:31:02
【问题描述】:

在 Javascript 的 XMLHttpRequest 对象中,有一个名为 readyState 的属性经常与响应代码一起使用,以在处理其他代码之前检查 HTTP 请求是否已完成。

 if (this.readyState == 4 && this.status == 200) {
   // Do stuff
 }

使用 Node.js 的 http module,您可以 make HTTP requests 并检索状态代码,就像 XMLHttpRequest 对象一样。

if (`${res.statusCode}` == 200) {
  //Do things
}

但是,http 模块是否具有与 XMLHttpRequest 对象具有的“readyState”属性等效的属性?我似乎在任何地方都找不到它的任何文档,但我想确保我只在发送的请求完全完成后才运行下一个代码,而不是在它完成一半的时候。

【问题讨论】:

    标签: javascript node.js xmlhttprequest


    【解决方案1】:

    您可以在响应完全完成时使用res.on('end', callback) 运行,并在完成时传递回调来处理响应。

    在这种情况下,以一个巨大的图像为例。当所有的块都被检索到时,它会继续到最后,然后,在它之后,回调被调用。

    const http = require('http')
    const options = {
         host: 'placekitten.com',
         path: '/5000/2500'
    } 
    
    http.get(options, (res) => {
         let code = res.statusCode
         console.log("Got response: " + code)
         res.on('data', chunk => console.log("Data received"))
         res.on('end', () => {
              if (code === 200) {
                   console.log("Sent request has fully finished")
              } else {
                   console.log("Code wasn't 200!")
              }
         })
    }).on('error', function(e) {
         console.log("Got error: " + e.message)
    })     
    

    输入此代码here 以在实时服务器上试用。

    【讨论】:

    • 太好了,谢谢!如果我使用https.request() 而不是http.get() 并在http.ServerResponse 上检查状态码是否为200,这是否等同于使用res.on('end'. callback)?或者如果没有.on(end...),我们是否不能保证响应完全完成,即使状态码为 200? (即,即使状态码为 200,大图像的某些块是否仍在发送过程中?)
    • 如果您要使用req = http.request(options, callback),那么与res.on('end',callback) 相同。但是,如果您使用后者,如文档所述: "...(您)必须始终调用 req.end() 来表示请求的结束 - 即使没有数据写入请求正文。 " 注意res.on('end')req.end() 是不同的方法
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2014-07-01
    相关资源
    最近更新 更多