上一篇
http.js
- 行业动态
- 2025-04-26
- 4872
http.js是轻量级JavaScript HTTP请求库,支持Promise语法,兼容浏览器与Node.js环境,可简化异步请求操作,适用于快速构建网络请求功能
http.js
通常指 Node.js 内置的 http
模块,用于创建 HTTP 服务器或客户端,它提供底层 API,适合处理简单的 HTTP 请求与响应,但实际开发中常结合框架(如 Express)或工具库使用。
创建 HTTP 服务器
使用 http.createServer()
方法创建服务器实例,监听指定端口并处理请求。
示例代码:
const http = require('http'); const server = http.createServer((req, res) => { // 设置响应头 res.writeHead(200, { 'Content-Type': 'text/plain' }); // 发送响应数据 res.end('Hello, World!'); }); // 监听端口 server.listen(3000, () => { console.log('Server is running on port 3000'); });
处理请求与响应
请求对象 (req
)
属性/方法 | 说明 |
---|---|
req.url | 请求路径(如 /api/data ) |
req.method | 请求方法(如 GET 、POST ) |
req.headers | 请求头对象(如 { host: 'localhost:3000', ... } ) |
req.on('data') | 监听请求体数据(流式传输) |
响应对象 (res
)
方法/属性 | 说明 |
---|---|
res.writeHead() | 设置响应状态码和头部(如 res.writeHead(200, { 'Content-Type': 'application/json' }) ) |
res.write() | 发送部分响应数据(可多次调用) |
res.end() | 结束响应并发送剩余数据 |
客户端请求
使用 http.request()
发起 HTTP 请求,支持 GET、POST 等方法。
示例代码(POST 请求):
const http = require('http'); const options = { hostname: 'jsonplaceholder.typicode.com', port: 80, path: '/posts', method: 'POST', headers: { 'Content-Type': 'application/json' } }; const req = http.request(options, (res) => { let data = ''; res.on('data', chunk => data += chunk); res.on('end', () => console.log(data)); }); req.on('error', error => console.error(error)); req.write(JSON.stringify({ title: 'foo', body: 'bar' })); req.end();
中间件与路由
http
模块本身不提供路由或中间件功能,需手动实现。
const routes = { '/': (req, res) => res.end('Home Page'), '/about': (req, res) => res.end('About Page') }; const server = http.createServer((req, res) => { const routeHandler = routes[req.url] || ((req, res) => res.statusCode = 404).bind(null, req, res); routeHandler(req, res); });
错误处理
- 服务器错误:监听
'error'
事件,避免进程崩溃。server.on('error', (err) => { console.error('Server Error:', err); });
- 客户端错误:通过
res.statusCode
设置状态码(如404
、500
)。
常见问题
问题 | 解决方案 |
---|---|
端口被占用 | 更换端口号或终止占用进程 |
未处理请求体导致内存泄漏 | 监听 req.on('data') 并限制数据大小 |
跨域问题(CORS) | 设置响应头 Access-Control-Allow-Origin: |
问题与解答
问题 1:如何用 http
模块支持 HTTPS?
解答:需使用 https
模块,并提供证书文件,示例:
const https = require('https'); const fs = require('fs'); const server = https.createServer({ key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') }, (req, res) => { res.end('Secure Connection'); }); server.listen(443);
问题 2:如何处理大文件上传?
解答:使用流式处理,逐块读取数据并存储,示例:
const server = http.createServer((req, res) => { const writeStream = fs.createWriteStream('./upload.txt'); req.pipe(writeStream); writeStream.on('finish', () => res.end('Upload Successful')); });