Node.js中的 http 模块实战举例

 更新时间:2025年09月19日 10:34:22   作者:艾光远  
Node.js的http模块是核心工具,用于创建HTTP服务器和客户端,处理请求响应,支持HTTP/1.1协议,提供createServer、request等方法,是构建Web应用的基础,也可结合实现WebSocket协议,本文给大家介绍Node.js中的http模块的相关知识,感兴趣的朋友一起看看吧

Node.js 的 http 模块是 Node.js 内置的核心模块之一,它允许开发者创建 HTTP 服务器和客户端。通过这个模块,我们可以轻松地处理 HTTP 请求和响应,构建 Web 应用程序或 API 服务。

http 模块提供了创建服务器和发起 HTTP 请求的能力,是构建 Web 应用的基础。它支持 HTTP/1.1 协议,并提供了丰富的 API 来处理各种 HTTP 相关的操作。

http 模块是 Node.js 中的核心模块之一,专门用于构建基于 HTTP 的网络应用程序。它允许创建 HTTP 服务器和客户端,处理网络请求和响应。

1. 核心 API 详解

1.1. http.createServer([options][, requestListener])

用于创建 HTTP 服务器的核心方法,返回一个 http.Server 实例,可监听指定端口并处理请求。

  • options(可选):用于提供服务器配置,允许指定 HTTP/1.1、HTTP/2 等协议。
  • requestListener(可选):一个回调函数,在每次接收到客户端请求时调用。
const http = require('http');
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, world!\n');
});
server.listen(3000, '127.0.0.1', () => {
  console.log('Server running at http://127.0.0.1:3000/');
});
  • req:包含请求的详细信息,比如 URL、HTTP 方法、请求头等。
  • res:用于响应客户端请求,可以设置状态码、响应头以及响应体。

1.2.request and response Objects

1. http.IncomingMessage

表示服务器接收到的请求,是一个可读流,用于获取请求体和元数据。

常用属性:

  • req.method:请求的方法。
  • req.url:请求的路径和查询参数。
  • req.headers:请求的头部信息。

2. http.ServerResponse

表示服务器对客户端的响应,是一个可写流,用于发送响应数据。

常用方法:

  • res.writeHead(statusCode[, headers]):设置状态码和头部信息。
  • res.end([data[, encoding]][, callback]):结束响应并可以发送数据。

1.3. http.request(options[, callback])

用于创建 HTTP 客户端请求。

const options = {
  hostname: 'www.google.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(data);
  });
});
req.on('error', (e) => {
  console.error(`Problem with request: ${e.message}`);
});
req.end();
  • options:用于配置请求的目标、方法、头信息等。
  • callback:处理响应的回调函数。

1.4.http.get(options[, callback])

这是一个简化版的 http.request,专门用于 GET 请求,自动调用 req.end(),不需要显式调用。

http.get('http://www.google.com', (res) => {
  res.on('data', (chunk) => {
    console.log(`Data chunk: ${chunk}`);
  });
  res.on('end', () => {
    console.log('No more data.');
  });
});

2. 实战项目:简单的 HTTP 服务器与客户端

创建一个简单的 HTTP 服务器,它可以响应客户端的 GET 和 POST 请求。同时,通过客户端请求获取服务器上的数据。

2.1.创建 HTTP 服务器

在服务器端,接受 GET 和 POST 请求,并返回不同的响应。

const http = require('http');
const server = http.createServer((req, res) => {
  if (req.method === 'GET' && req.url === '/') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ message: 'Welcome to the GET request!' }));
  } else if (req.method === 'POST' && req.url === '/submit') {
    let body = '';
    req.on('data', (chunk) => {
      body += chunk.toString();
    });
    req.on('end', () => {
      res.writeHead(200, { 'Content-Type': 'application/json' });
      res.end(JSON.stringify({ message: 'Data received!', data: body }));
    });
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('404 Not Found');
  }
});
server.listen(3000, () => {
  console.log('Server listening on port 3000');
});

2.2.创建 HTTP 客户端

客户端将发送 GET 和 POST 请求来与服务器进行交互。

const http = require('http');
// Send GET request
http.get('http://localhost:3000', (res) => {
  let data = '';
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    console.log('GET Response:', data);
  });
});
// Send POST request
const postData = JSON.stringify({ name: 'John', age: 30 });
const options = {
  hostname: 'localhost',
  port: 3000,
  path: '/submit',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': postData.length,
  },
};
const req = http.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    console.log('POST Response:', data);
  });
});
req.write(postData);
req.end();

通过 http 模块直接实现 WebSocket (WS) 协议是一项深入底层协议的工作。WebSocket 是基于 TCP 的协议,在其通信过程中,依赖于 HTTP 协议的握手机制,但通信方式和 HTTP 不同,它允许建立一个长期的、双向的连接。为了实现 WebSocket 服务器,需要结合对 HTTP 和 WebSocket 握手机制、数据帧协议以及 TCP/IP 模型的理解。

到此这篇关于Node.js中的 http 模块详解的文章就介绍到这了,更多相关node.js http模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nodejs极简入门教程(一):模块机制

    Nodejs极简入门教程(一):模块机制

    这篇文章主要介绍了Nodejs极简入门教程(一):模块机制,本文讲解了模块基础知识、模块的加载、包等内容,需要的朋友可以参考下
    2014-10-10
  • Node.js Webpack常见的模式详解

    Node.js Webpack常见的模式详解

    这篇文章主要介绍了Node.js Webpack常见的模式,Webpack的另一个核心是Plugin ,Plugin是可以用于执行更加广泛的任务如打包优化资源管理 环境变量注入等,需要的朋友可以参考下
    2022-10-10
  • Nodejs之Express中间件的分类介绍

    Nodejs之Express中间件的分类介绍

    这篇文章主要介绍了Nodejs之Express中间件的分类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Node.js返回JSONP详解

    Node.js返回JSONP详解

    下面小编就为大家带来一篇Node.js返回JSONP详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • node.js操作MongoDB的实例详解

    node.js操作MongoDB的实例详解

    这篇文章主要介绍了node.js操作MongoDB的实例详解的相关资料,希望通过本能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • Node中node_modules文件夹及package.json文件的作用说明

    Node中node_modules文件夹及package.json文件的作用说明

    这篇文章主要介绍了Node中node_modules文件夹及package.json文件的作用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • node.js中fs文件系统模块的使用方法实例详解

    node.js中fs文件系统模块的使用方法实例详解

    这篇文章主要介绍了node.js中fs文件系统模块的使用方法,结合实例形式详细分析了node.js fs文件系统模块各种常见方法的基本使用技巧与相关操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Node中Unexpected end of form错误的问题分析及解决方案

    Node中Unexpected end of form错误的问题分析及解决方案

    在Node中我们经常会遇到Unexpected end of form 错误,这个是由于app.use(upload.any())导致的,这个错误通常发生在 Multer 中间件配置不当 或 前端请求数据不完整 的情况下,本文给大家介绍了可能的原因和解决方案,需要的朋友可以参考下
    2025-07-07
  • nodejs爬虫初试superagent和cheerio

    nodejs爬虫初试superagent和cheerio

    这篇文章主要介绍了nodejs爬虫初试superagent和cheerio的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • node.js中的events.emitter.once方法使用说明

    node.js中的events.emitter.once方法使用说明

    这篇文章主要介绍了node.js中的events.emitter.once方法使用说明,本文介绍了events.emitter.once的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12

最新评论