首页 > 解决方案 > XMLHttpRequest.readyState 是否有 node.js http 等效项?

问题描述

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

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

使用 Node.js 的http 模块,您可以发出 HTTP 请求并检索状态代码,就像 XMLHttpRequest 对象一样。

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

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

标签: javascriptnode.jsxmlhttprequest

解决方案


您可以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)
})     

将此代码放在此处以在实时服务器上试用。


推荐阅读