当前位置:首页 > 行业动态 > 正文

http.js

http.js是轻量级JavaScript HTTP请求库,支持Promise语法,兼容浏览器与Node.js环境,可简化异步请求操作,适用于快速构建网络请求功能

http.js 通常指 Node.js 内置的 http 模块,用于创建 HTTP 服务器或客户端,它提供底层 API,适合处理简单的 HTTP 请求与响应,但实际开发中常结合框架(如 Express)或工具库使用。


创建 HTTP 服务器

使用 http.createServer() 方法创建服务器实例,监听指定端口并处理请求。
示例代码:

http.js  第1张

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 请求方法(如 GETPOST
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);
});

错误处理

  1. 服务器错误:监听 'error' 事件,避免进程崩溃。
    server.on('error', (err) => {
      console.error('Server Error:', err);
    });
  2. 客户端错误:通过 res.statusCode 设置状态码(如 404500)。

常见问题

问题 解决方案
端口被占用 更换端口号或终止占用进程
未处理请求体导致内存泄漏 监听 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'));
});
0