Node的Web编程

news2025/8/7 14:37:50

一、node的事件处理

1、node采用的事件驱动模式来进行事件处理的:只有当事件被触发时才执行相关程序

2、node是单线程运行的:采用事件轮询方式,不断的查询事件队列中的消息,然后根据消息执行对应的回调函数

 

 

3、node事件机制中的三个角色

​ (1)事件(Event):使用node的内置模块’events’

​ (2)事件发射器(EventEmitter):是一个类。使用时创建该类的对象,通过对象调用以下的方法

​ addListener(事件名,事件处理程序):注册事件监听

​ on(事件名,事件处理程序):注册事件监听

​ removeListener(event, listener):删除事件监听

​ emit(事件名):手动触发指定的事件

​ (3)事件监听器(EventListener):

//1.导入events模块
const events = require('events')
//2.创建EventEmitter类的对象
const eventEmitter = new events.EventEmitter()
//3.注册事件
eventEmitter.on('woniu',function(){  //‘woniu’是自定义的事件名
    console.log('疫情严重,注意防控')
})
//4.手动触发‘woniu’事件
eventEmitter.emit('woniu')
//导入http模块
const http = require('http')
//1.创建server
const server = http.createServer()
/*
   2.给服务器绑定(注册)事件:request  -- 请求事件(处理客户端的请求)
       req:请求对象。服务器通过该对象获取客户端的请求信息
       res:响应对象。服务器通过该对象向客户端发送信息
*/
server.on('request',(req,res)=>{ //req:表示请求对象(存放了客户端的请求信息);res:表示响应对象(用于服务器向客户端发送响应信息)
    let info = req.url //req.url:客户端的url
    info = info.substring(2,info.length)
    let tmp = info.split('=')
    res.end(`Hello,${tmp[1]}`) //服务器向客户端发送字符串:'hello,World!'
})
//3.启动监听:指定服务器地址、端口号
server.listen(8089,'127.0.0.1')

二、node的全局对象

1、全局变量

​ (1)__filename:代表的是正在执行的文件的文件名。带绝对路径的文件名(绝对路径 + 文件名)

​ (2)__dirname:代表当前正在执行的文件所在的目录

2、全局对象

​ process对象 :存放的node的进程信息,可以放在程序的任何位置,也不用require进行加载

​ 程序:静态的代码

​ 进程:运行中的程序

​ 线程:是进程的一个小的单元

​ process对象的属性:

​ (1)stdout:返回的是一个对象,代表一个标准输出。它下面的方法write,作用和console.log方法一样

​ (2)stdin:返回的是一个对象,代表一个标准输入。

三、node的readline模块

1、是node中实现标准输入输出的模块,可以逐行的读取终端的数据。使用时必须通过require引入

2、使用方法:

​ (1)引入模块:require(‘readline’)

const readline = require('readline')

(2)创建readline模块的实例,该实例的input属性值就是process.stdin,output属性值是process.stdout

let  r1 = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

​ (3)注册事件监听:完成输入输出操作

//3. 注册question事件监听:实现数据的输入
r1.question('请输入数据:',(result)=>{
    console.log('你输入的数据是:',result)
    r1.close()  //当r1对象调用close()函数时,触发close事件
})

​ 3、readline模块的事件:line —- 会在用户输入一行,按回车键后触发

r1.on('line',(result)=>{
    处理代码
})

例如:

r1.on('line',(result)=>{
    switch(result.trim()){
        case 'copy':
            console.log('复制')
            break
        case 'add':
            console.log('添加')
            break
        case 'close':
            r1.close()
    }
})

四、node的Web编程。

作业:什么是TCP协议?什么是UDP协议?TCP协议的三次握手、四次挥手是什么?

1、web服务器:专门处理通过http协议发送的用户请求的应用程序。可以给用户返回信息,这些信息可以是文本、图片、html文档等

2、web应用程序的体系结构:

​ (1)Client端:手机浏览器、电脑的浏览器、应用程序等

​ (2)Server端:拦截客户端通过http协议发出的请求

​ (3)Business:运行在Server上的程序

​ (4)Data:数据

3、url模块:用来处理和解析url地址

​ (1)引入:require(‘url’)

​ (2)parse(字符串):将给定的字符串解析成url对象返回。url对象的属性包括:

​ protocol:网络协议

​ host:主机名和端口号

​ port:端口号

​ hostname:主机名

​ search:请求数据。包含了分隔符?

​ query:请求字符串

​ href:将字符串转换后的url地址

示例:前后端交互

​ (1)前端:login.html (包含form表单)

<form action="http://127.0.0.1:9000" method="get">
        <label>
            用户名:
            <input type="text" name="empName">
            <button type="submit">提交</button>
        </label>
</form>

(2)后端:node的http模块创建一个服务器(接收表单数据、并把表单的数据传回给前端)

//1.导入http模块:创建服务器
const http = require('http')
//2. 导入url模块:解析客户端的请求地址
const url = require('url')
//3. 创建服务器
const httpServer = http.createServer()
//4. 给服务器注册事件监听:request(请求事件),当客户端向服务器发起请求时触发该事件
httpServer.on('request',(req,res)=>{
    //4.1 使用url模块的parse方法将客户端的请求地址解析成url对象
    if(req.url != '/favicon.ico'){
        let client = url.parse(req.url)
        //4.2 获取url对象client的query属性值:就是前端的表单数据
           let queryData = client.query
        //4.3 对获取的表单数据进行处理:
           let arr = (queryData.toString()).split('=')
        //4.4 用res将表单数据响应给客户端
            res.end(`Welcome: ${arr[1]}`)
    } 
})
//5. 启动服务器的监听
httpServer.listen(9000,'127.0.0.1')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI代理艾赛斯DSP25-12A,整流二极管DSP25-12A

编辑-Z 艾赛斯整流二极管DSP25-12A参数&#xff1a; 型号&#xff1a;DSP25-12A 最大重复反向阻断电压&#xff08;VRRM&#xff09;&#xff1a;1200V 反向电流、漏极电流&#xff08;IR&#xff09;&#xff1a;40uA 正向电压降&#xff08;VF&#xff09;&#xff1a;1…

this用法总结

文章目录1.常规下this的指向1.1 全局环境中的this1.2 上下文对象调用中的this1.3 this指向绑定事件的元素1.4 箭头函数的this指向2. 改变this指向2.1 call - Function.prototype.call( )2.1.1 call的第一个参数2.1.2 call接受多个参数2.1.3 调用对象的原生方法2.2 apply - Func…

LFMCW雷达测速基础- 多普勒频移和2DFFT

LFMCW雷达测速基础1 基本测速原理——多普勒频移1.0 写在前面1.1 多普勒效应1.2 多普勒频移疑问2 LFMCW雷达测速原理2.1 Doppler Shift 到底是调频还是调相2.2 为什么是二维FFT1 基本测速原理——多普勒频移 1.0 写在前面 振动/波在空间中传播有三个关键变量&#xff0c;分别…

iNFTnews|Web3正在重新定义粉丝的意义

数字身份正在发展&#xff0c;粉丝圈本身也在发展。Web3技术使粉丝们能够以一种更加人际化的方式与同好、媒体、内容创作者甚至他们崇拜的名人进行互动&#xff0c;粉丝和创作者都可以获得更人性化的体验。另外&#xff0c;一些激励措施还有望从根本上改变我们对名人概念本身的…

Java#14(StringJoiner)

目录 一.StringJoiner的构造方法和成员方法 StringJoiner是jdk8才出现的 作用:可以高效和方便的拼接字符串 1.StringJoiner的构造方法 2.StringJoiner的成员方法 一.StringJoiner的构造方法和成员方法 StringJoiner是jdk8才出现的 作用:可以高效和方便的拼接字符串 1.Stri…

一篇文章入门单链表+刷题实践【java实现+详细注释】

文章目录节点定义链表类获取链表长度清空链表添加节点到链表尾部根据id来删除节点根据id来查询节点修改相同id的节点信息打印链表逆序打印反转链表测试代码打印信息习题反转链表删除链表的节点删除链表的倒数第k个节点节点定义 关于节点里面所存储的信息&#xff0c;需要什么就…

洛谷 P1064 - 金明的预算方案(分组背包)

题目描述 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是&#xff0c;妈妈昨天对他说&#xff1a;“你的房间需要购买哪些物品&#xff0c;怎么布置&#xff0c;你说了算&#xff0c;只要不超过 n…

HTML学生个人网站作业设计:(宠物官网8页)——bootstarp响应式含有轮播图,响应式页面

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#…

H7-TOOL发布V2.19,脱机烧录新增中微半导体、广芯微电子、中移芯昇以及极海和灵动新系列,增加PWM发生器等功能(2022-11-17)

H7-TOOL详细介绍&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Po…

JavaScript对象与内置对象

JavaScript对象与内置对象 文章目录JavaScript对象与内置对象1.JavaScript的基本对象1.1 创建对象1.2 对象的调用1.3 构造函数和对象1.4 变量对象属性2.JavaScript的内置对象2.1 内置对象概念3.JavaScript的Math对象3.1 Math对象概念3.2 Math绝对值和三个取整方法3.3 随机数方法…

AndroidStudio 导入项目模块失败

平台 Ubuntu 20.04AndroidStudio Android Studio Dolphin | 2021.3.1 Patch 1 Build #AI-213.7172.25.2113.9123335, built on September 30, 2022 Runtime version: 11.0.130-b1751.21-8125866 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Linux 5.15.0-53-gen…

Structure-Aware Transformer for Graph Representation Learning

Structure-Aware Transformer for Graph Representation Learning 在图表示学习中&#xff0c;Transformer结构通过位置编码对图形结构进行编码&#xff0c;克服了GNN的几个局限性&#xff0c;但其使用位置编码生成的节点表示不一定能捕获他们之间的结构相似性&#xff0c;所以…

「Redis数据结构」哈希表(Dict)

「Redis数据结构」哈希表&#xff08;Dict&#xff09; 文章目录「Redis数据结构」哈希表&#xff08;Dict&#xff09;[toc]一、概述二、结构三、哈希冲突四、链式哈希五、rehash六、 渐进式 rehash七、总结参考我们知道Redis是一个键值型&#xff08;Key-Value Pair&#xff…

Python自制图片拼图小游戏

前言 唉&#xff0c;怎么说&#xff0c;感觉只有上班的时候摸鱼玩游戏才是最爽的 等于带薪摸鱼&#xff0c;现在不是有点流行说什么 带薪…带薪** 干嘛的 今天也是有点无聊&#xff0c;就想起之前搞了个拼图的小游戏&#xff0c;可以自己更改照片的 嘿嘿 这不刚玩了一局&am…

【Python】Pyside6简易版教程

文章目录一、安装及常见指令1.1 安装1.2 转换指令二、设计UI2.1 类别2.1.1 Spacer2.1.2 Buttons2.1.3 Input Widgets2.1.4 Display Widgets2.1.5 注意事项2.2 对象和属性2.2.1 对象2.2.2 属性2.2.2.1 属性的层级结构2.2.2.2 重要的属性2.2.2.3 插入图片三、回到Python3.1 给现有…

公众号配置调试“errMsg“:“config:fail,invalid signature

一:登陆“微信公众平台”,查看“ip白名单是否设置” ,之前是个可选项,现在是必须设置 二: 1:获取access_token微信公众平台接口调试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B…

JUC03-volatile、CAS及并发原子类

一、 Volatile Volatile可以用来修饰成员变量和静态成员变量&#xff0c;保证可见性、有序性 可见性&#xff1a;保证volatile修饰的变量每次读取都会从主从中进行读取而不是cpu缓存 有序性&#xff1a;对Volatile修饰变量进行写操作时&#xff0c;会在该操作后加上写屏障&…

【附源码】计算机毕业设计JAVA校园教育服务平台

【附源码】计算机毕业设计JAVA校园教育服务平台 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

【FLASH存储器系列十】Nand Flash芯片使用指导之一

目录 1.1 芯片简介 1.2 功能框图 1.3 存储结构 1.4 信号定义 1.5 双平面&#xff08;plane&#xff09;操作 1.6 Die间交错操作 1.7 错误管理 今天以MT29F8G08AJADAWP芯片为例&#xff0c;说明nand flash的操作方法。 1.1 芯片简介 这是一款镁光的容量8Gb&#xff0c;总…

功能上新 | Magic Data Annotator智能出行舱内舱外全场景标注

随着人工智能、互联网、大数据、5G等新技术应用和汽车产业变革的蓬勃兴起&#xff0c;智能汽车已成为汽车产业发展的重要战略方向。目前&#xff0c;智能驾驶已经成为目前车企营销的核心竞争力。在人车协作过程中&#xff0c;智能汽车最重要的功能就是车舱内外视觉功能&#xf…