Skip to content

http 模块

http 模块用于创建 HTTP 服务器和客户端,以便在 Node.js 应用程序中处理 HTTP 请求和响应。

创建 HTTP 服务器

  • http.createServer([requestListener])
    创建一个新的 HTTP 服务器。requestListener 是一个可选的回调函数,用于处理 HTTP 请求。
    返回一个 HTTP 服务器实例。

    js
    const http = require('http')
    
    const server = http.createServer((req, res) => {
      res.statusCode = 200
      res.setHeader('Content-Type', 'text/plain')
      res.end('Hello, World!')
    })
    
    server.listen(3000, '127.0.0.1', () => {
      console.log('Server running at http://127.0.0.1:3000/')
    })

HTTP 请求

  • http.request(options[, callback])
    发起一个 HTTP 请求。options 是一个包含请求参数的对象,callback 是可选的回调函数,在响应到达时被调用。

    js
    const http = require('http')
    
    const options = {
      hostname: 'www.example.com',
      port: 80,
      path: '/',
      method: 'GET',
    }
    
    const req = http.request(options, res => {
      let data = ''
    
      res.on('data', chunk => {
        data += chunk
      })
    
      res.on('end', () => {
        console.log('Response:', data)
      })
    })
    
    req.on('error', e => {
      console.error(`Problem with request: ${e.message}`)
    })
    
    req.end()
  • http.get(options[, callback])
    发起一个 HTTP GET 请求。它是 http.request() 的简化版,options 只支持 GET 方法。

    js
    const http = require('http')
    
    http
      .get('http://www.example.com', res => {
        let data = ''
    
        res.on('data', chunk => {
          data += chunk
        })
    
        res.on('end', () => {
          console.log('Response:', data)
        })
      })
      .on('error', e => {
        console.error(`Problem with request: ${e.message}`)
      })

HTTP 响应

  • response.write(chunk[, encoding][, callback])
    向响应主体写入数据。chunk 是要写入的内容,encoding 是可选的编码(默认为 'utf8'),callback 是可选的回调函数。

    js
    const http = require('http')
    
    const server = http.createServer((req, res) => {
      res.statusCode = 200
      res.setHeader('Content-Type', 'text/plain')
      res.write('Hello, ')
      res.write('World!')
      res.end()
    })
    
    server.listen(3000)
  • response.end([data[, encoding]])
    结束响应并发送数据。data 是可选的要发送的内容,encoding 是可选的编码。

    js
    const http = require('http')
    
    const server = http.createServer((req, res) => {
      res.statusCode = 200
      res.setHeader('Content-Type', 'text/plain')
      res.end('Goodbye!')
    })
    
    server.listen(3000)

HTTP 请求和响应对象

  • req (Request 对象)
    req 是 HTTP 请求的对象,包含有关请求的所有信息。

    • req.url:请求的 URL。
    • req.method:请求的方法(如 'GET', 'POST')。
    • req.headers:请求的头部信息。
    • req.on('data', callback):当接收到数据块时触发。
    • req.on('end', callback):当所有数据块接收完毕时触发。
  • res (Response 对象)
    res 是 HTTP 响应的对象,包含用于发送响应的 API。

    • res.statusCode:响应状态码(如 200, 404)。
    • res.setHeader(name, value):设置响应头。
    • res.getHeader(name):获取响应头。
    • res.write(chunk):向响应主体写入数据。
    • res.end([data]):结束响应并发送数据。

服务器事件

  • server.listen(port[, hostname][, backlog][, callback])
    启动 HTTP 服务器,监听指定的端口和主机名。

    js
    server.listen(3000, '127.0.0.1', () => {
      console.log('Server running at http://127.0.0.1:3000/')
    })
  • server.close([callback])
    停止服务器监听。callback 是可选的,服务器关闭后执行的回调函数。

    js
    server.close(() => {
      console.log('Server closed')
    })

请求和响应的常用方法

  • req.setTimeout(msecs[, callback])
    设置请求超时时间,msecs 是毫秒,callback 是超时后执行的回调函数。

    js
    req.setTimeout(5000, () => {
      console.log('Request timed out')
    })
  • res.setTimeout(msecs[, callback])
    设置响应超时时间,msecs 是毫秒,callback 是超时后执行的回调函数。

    js
    res.setTimeout(5000, () => {
      console.log('Response timed out')
    })
  • req.pipe(dest[, options])
    将请求的数据流传输到目标流(例如文件、响应对象等)。

    js
    const fs = require('fs')
    const server = http.createServer((req, res) => {
      const fileStream = fs.createReadStream('file.txt')
      fileStream.pipe(res)
    })

HTTP 状态码常用值

  • 200:请求成功。
  • 301:永久重定向。
  • 302:临时重定向。
  • 400:错误的请求。
  • 404:资源未找到。
  • 500:服务器内部错误。

基于 MIT 许可发布