主题
http
模块
http
模块用于创建 HTTP 服务器和客户端,以便在 Node.js 应用程序中处理 HTTP 请求和响应。
创建 HTTP 服务器
http.createServer([requestListener])
创建一个新的 HTTP 服务器。requestListener
是一个可选的回调函数,用于处理 HTTP 请求。
返回一个 HTTP 服务器实例。jsconst 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
是可选的回调函数,在响应到达时被调用。jsconst 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 方法。jsconst 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
是可选的回调函数。jsconst 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
是可选的编码。jsconst 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 服务器,监听指定的端口和主机名。jsserver.listen(3000, '127.0.0.1', () => { console.log('Server running at http://127.0.0.1:3000/') })
server.close([callback])
停止服务器监听。callback
是可选的,服务器关闭后执行的回调函数。jsserver.close(() => { console.log('Server closed') })
请求和响应的常用方法
req.setTimeout(msecs[, callback])
设置请求超时时间,msecs
是毫秒,callback
是超时后执行的回调函数。jsreq.setTimeout(5000, () => { console.log('Request timed out') })
res.setTimeout(msecs[, callback])
设置响应超时时间,msecs
是毫秒,callback
是超时后执行的回调函数。jsres.setTimeout(5000, () => { console.log('Response timed out') })
req.pipe(dest[, options])
将请求的数据流传输到目标流(例如文件、响应对象等)。jsconst 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:服务器内部错误。