Node.js的http模块:创建HTTP服务器、客户端示例
新书速览|Vue.js+Node.js全栈开发实战-CSDN博客
《Vue.js+Node.js全栈开发实战(第2版)(Web前端技术丛书)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)
要使用http模块,只需要在文件中通过require('http')引入即可。http模块是Node.js原生模块中最为亮眼的模块。传统的HTPP服务器会由Apache、Nginx、IIS之类的软件来担任,但是Node.js并不需要。Node.js的http模块本身就可以构建服务器,而且性能非常可靠。
1.Node.js服务器端
下面创建一个简单的Node.js服务器。
【代码4-4】
01 const http = require('http');
02 const server = http.createServer(function(req, res) {
03 res.writeHead(200,{
04 'content-type': 'text/plain'
05 });
06 res.end('Hello, Node.js!');
07 });
08 server.listen(3000, function() {
09 console.log('listening port 3000');
10 });
【代码说明】
- 运行这段代码,在浏览器中打开http://localhost:3000/或者http://127.0.0.1:3000/,页面中显示“Hello,Node.js!”文字。
http.createServer()方法返回的是http模块封装的一个基于事件的HTTP服务器。同样地,http.request是其封装的一个HTTP客户端工具,可以用来向HTTP服务器发起请求。上面的req和res分别是http.IncomingMessage和 http.ServerResponse的实例。
http.Server的事件主要有:
- request:最常用的事件,当客户端请求到来时,该事件被触发,提供req和res两个参数,表示请求和响应信息。
- connection:当TCP连接建立时,该事件被触发,提供一个socket参数,是net.Socket的实例。
- close:当服务器关闭时,触发事件(注意,不是在用户断开连接时)。
http.createServer()方法其实就是添加了一个request事件监听,利用下面的代码同样可以实现【代码4-4】的效果。
【代码4-5】
01 const http = require('http');
02 const server = new http.Server();
03 server.on('request', function(req, res) {
04 res.writeHead(200,{
05 'content-type': 'text/plain'
06 });
07 res.end('Hello, Node.js!');
08 });
09 server.listen(3000, function() {
10 console.log('listening port 3000');
11 });
http.IncomingMessage是HTTP请求的信息,提供了以下3个事件:
data:当请求体数据到来时该事件被触发。该事件提供一个chunk参数,表示接收的数据。
end:当请求体数据传输完毕时,该事件被触发,此后不会再有数据。
close:用户当前请求结束时,该事件被触发。
http.IncomingMessage提供的主要属性有:
method:HTTP请求的方法,如GET。
headers:HTTP请求头。
url:请求路径。
httpVersion:HTTP协议的版本。
将上面提到的知识融合到【代码4-4】的服务器代码中。
【代码4-6】
01 const http = require('http');
02 const server = http.createServer(function(req, res) {
03 let data = '';
04 req.on('data', function(chunk) {
05 data += chunk;
06 });
07 req.on('end', function() {
08 let method = req.method;
09 let url = req.url;
10 let headers = JSON.stringify(req.headers);
11 let httpVersion = req.httpVersion;
12 res.writeHead(200,{
13 'content-type': 'text/html'
14 });
15 let dataHtml = '<p>data:' + data + '</p>';
16 let methodHtml = '<p>method:' + method + '</p>';
17 let urlHtml = '<p>url:' + url + '</p>';
18 let headersHtml = '<p>headers:' + headers + '</p>';
19 let httpVersionHtml = '<p>httpVersion:' + httpVersion + '</p>';
20 let resData=dataHtml + methodHtml + urlHtml + headersHtml + httpVersionHtml;
21 res.end(resData);
22 });
23 });
24 server.listen(3000, function() {
25 console.log('listening port 3000');
26 });
打开浏览器输入地址后,可以在浏览器页面中看到如图4.9所示的信息。

图4.9 浏览器效果
http.ServerResponse是返回给客户端的信息,其常用的方法为:
- res.writeHead(statusCode,[heasers]):向请求的客户端发送响应头。
- res.write(data,[encoding]):向请求发送内容。
- res.end([data],[encoding]):结束请求。
这些方法在上面的代码中已经演示过了,这里就不再演示了。
2.客户端向HTTP服务器发起请求
客户端向HTTP服务器发起请求的方法有:
- http.request(option[,callback]):option为json对象,主要字段有host、port(默认为80)、method(默认为GET)、path(请求的相对于根的路径,默认是“/”)、headers等。该方法返回一个httpClientRequest实例。
- http.get(option[,callback]):http.request()使用HTTP请求方式GET的简便方法。
同时运行【代码4-4】和【代码4-7】中的代码,可以发现命令行中输出“Hello, Node.js!”字样,表明一个简单的GET请求发送成功了。
【代码4-7】
01 const http = require('http');
02 let reqData = '';
03 http.request({
04 'host': '127.0.0.1',
05 'port': '3000',
06 'method': 'get'
07 }, function(res) {
08 res.on('data', function(chunk) {
09 reqData += chunk;
10 });
11 res.on('end', function() {
12 console.log(reqData);
13 });
14 }).end();
利用http.get()方法也可以实现同样的效果。
【代码4-8】
01 const http = require('http');
02 let reqData = '';
03 http.get({
04 'host': '127.0.0.1',
05 'port': '3000'
06 }, function(res) {
07 res.on('data', function(chunk) {
08 reqData += chunk;
09 });
10 res.on('end', function() {
11 console.log(reqData);
12 });
13 }).end();
与服务端一样,http.request()和http.get()方法返回的是一个http.ClientRequest()实例。http.ClientRequest()类主要的事件和方法有:
- response:当接收到响应时触发。
- request.write(chunk[,encoding][,callback]):发送请求数据。
- res.end([data][,encoding][,callback]):发送请求完毕,应该始终指定这个方法。
同样可以改写【代码4-8】为【代码4-9】。
【代码4-9】
01 const http = require('http');
02 let reqData = '';
03 let option= {
04 'host': '127.0.0.1',
05 'port': '3000'
06 };
07 const req = http.request(option);
08 req.on('response', function(res) {
09 res.on('data', function(chunk) {
10 reqData += chunk;
11 });
12 res.on('end', function() {
13 console.log(reqData);
14 });
15 });



相关文章:
Node.js的http模块:创建HTTP服务器、客户端示例
新书速览|Vue.jsNode.js全栈开发实战-CSDN博客 《Vue.jsNode.js全栈开发实战(第2版)(Web前端技术丛书)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 要使用http模块,只需要在文件中通过require(http)引入即可。…...
加菲工具 - 好用免费的在线工具集合
加菲工具 https://orcc.online AI 工具 加菲工具 集合了目前主流的,免费可用的ai工具 文档处理 加菲工具 pdf转word、office与pdf互转等等工具都有链接 图片图标 加菲工具 统计了好用免费的在线工具 编码解码 加菲工具 base64编码解码、url编码解码、md5计算…...
.NET9 - 新功能体验(二)
书接上回,我们继续来聊聊.NET9和C#13带来的新变化。 01、新的泛型约束 allows ref struct 这是在 C# 13 中,引入的一项新的泛型约束功能,允许对泛型类型参数应用 ref struct 约束。 可能这样说不够直观,简单来说就是Span、ReadO…...
map和redis关系
Map 和 Redis 都是用于存储和管理数据的工具,但它们在用途、实现和应用场景上有所不同。下面详细解释 Map 和 Redis 之间的关系和区别。 1. Map 数据结构 定义 Map 是一种数据结构,用于存储键值对(key-value pairs)。每个键都是…...
《数据结构》学习系列——图(中)
系列文章目录 目录 图的遍历深度优先遍历递归算法堆栈算法 广度优先搜索 拓扑排序定义定理算法思想伪代码 关键路径基本概念关键活动有关量数学公式伪代码时间复杂性 图的遍历 从给定连通图的某一顶点出发,沿着一些边访问遍图中所有的顶点,且使每个顶点…...
探索Python的HTTP之旅:揭秘Requests库的神秘面纱
文章目录 **探索Python的HTTP之旅:揭秘Requests库的神秘面纱**第一部分:背景介绍第二部分:Requests库是什么?第三部分:如何安装Requests库?第四部分:Requests库的五个简单函数使用方法第五部分&…...
Python 爬虫从入门到(不)入狱学习笔记
爬虫的流程:从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战:豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据(略) 一般爬虫的基…...
IDEA优雅debug
目录 引言一、断点分类🎄1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧🎉3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言 使用ID…...
wp the_posts_pagination 与分类页面搭配使用
<ul> <?php while( have_posts() ) : the_post(); <li > <a href"<?php the_permalink(); ?>"> <?php xizhitbu_get_thumbnail(thumb-pro); ?> </a> <p > <a href&q…...
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
【Python】分割秘籍!掌握split()方法,让你的字符串处理轻松无敌!
在Python开发中,字符串处理是最常见也是最基础的任务之一。而在众多字符串操作方法中,split()函数无疑是最为重要和常用的一个。无论你是Python新手,还是经验丰富的开发者,深入理解并熟练运用split()方法,都将大大提升…...
免费实用在线AI工具集合 - 加菲工具
免费在线工具-加菲工具 https://orcc.online/ 在线录屏 https://orcc.online/recorder 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/h…...
正则表达式灾难:重新认识“KISS原则”的意义
RSS Feed 文章标题整理 微积分在生活中的应用与思维启发 捕鹿到瞬时速度的趣味探索 微积分是一扇通往更广阔世界的门,从生活中学习思维的工具。 数据库才是最强架构 你还在被“复杂架构”误导吗? 把业务逻辑写入数据库,重新定义简单与效率。…...
eNSP-缺省路由配置
缺省路由是一种特殊的静态路由,其目的地址为0.0.0.0,子网掩码为0.0.0.0。 1.拓扑图搭建 2.配置路由器 AR2 <Huawei>sys #进入系统视图 [Huawei]ip route-static 0.0.0.0 0.0.0.0 192.168.3.2 #设置缺省路由 [Huawei]q #返回上一层 <Huawe…...
solr 远程命令执行 (CVE-2019-17558)
漏洞描述 Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目,旨在确保Web应用程序在表示层和业务逻辑层之间的隔离(即MVC设计模式)。 Apa…...
STM32端口模拟编码器输入
文章目录 前言一、正交编码器是什么?二、使用步骤2.1开启时钟2.2配置编码器引脚 TIM3 CH1(PA6) CH2 (PA7)上拉输入2.3.初始化编码器时基2.4 初始化编码器输入2.5 配置编码器接口2.6 开启定时器2.7获取编码器数据 三、参考程序四、测试结果4.1测试方法4.2串口输出结果…...
Centos 8, add repo
Centos repo前言 Centos 8更换在线阿里云创建一键更换repo 自动化脚本 华为Centos 源 , 阿里云Centos 源 华为epel 源 , 阿里云epel 源vim /centos8_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author: make.han...
MYSQL- 查看存储过程调式信息语句(二十七)
13.7.5.27 SHOW PROCEDURE CODE 语句 SHOW PROCEDURE CODE proc_name此语句是MySQL扩展,仅适用于已构建有调试支持的服务器。它显示了命名存储过程的内部实现的表示。类似的语句SHOW FUNCTION CODE显示有关存储函数的信息(见第13.7.5.19节“SHOW FUNTIO…...
C#基础上机练习题
21.计算500-800区间内素数的个数cn,并按所求素数的值从大到小的顺序排列,再计算其间隔加、减之和,即第1个素数-第2个素数第3个素数-第4个素数第5个素数……的值sum。请编写函数实现程序的要求,把结果cn和sum输出。 22.在三位整数…...
5.5 W5500 TCP服务端与客户端
文章目录 1、TCP介绍2、W5500简介2.1 关键函数socketlistensendgetSn_RX_RSRrecv自动心跳包检测getSn_SR 1、TCP介绍 TCP 服务端: 创建套接字[socket]:服务器首先创建一个套接字,这是网络通信的端点。绑定套接字[bind]:服务器将…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
