一.node的事件处理;二.node的全局对象;三.node的readline模块;四.node的Web编程

news2025/8/1 11:52:38

目录

一.node的事件处理

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

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

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

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

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

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

二.node的全局对象

1.全局变量

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

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

2.全局对象

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

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

三.node的readline模块

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

2.使用方法:

(1)引入模块:require('readline')

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

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

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

四.node的Web编程

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对象的属性包括:

一.node的事件处理

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

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

 

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

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

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

        addListener(事件名,事件处理程序)

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

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

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

(3)事件监听器(EventListener)

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

二.node的全局对象

1.全局变量

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

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

console.log('文件名:'+__filename)
console.log('文件路径:'+__dirname)

2.全局对象

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

console.log('系统信息:',process)

        程序:静态的代码

        进程:运行中的程序

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

process对象的属性

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

process.stdout.write('咸阳市')

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

process.stdout.write('请输入一个数:')
process.stdin.on('data',(result)=>{
    // process.stdout.write('你输入的数据是:'+result.toString().trim())
    let s=1
    for (let i = 1; i <= parseInt(result); i++) {
        s = s * i
    }
    process.stdout.write(parseInt(result)+'!='+s)
    process.exit()//结束进程
})

三.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)注册事件监听:完成输入输出

r1.question('请输入数据:',(result)=>{
    console.log('你输入的数据是:',result)
    // process.exit()
    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.clos()
    }
})

四.node的Web编程

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:8999" method="get">
        <label for="">
            用户名:
            <input type="text" name="user">
            <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)=>{
    if(req.url != '/favicon.ico'){//过滤谷歌浏览器自动发送的请求
        // 4.1使用url模块的parse方法将客户端的请求地址解析成url对象
        // console.log(req.url)//  /?user=zhang
        let client = url.parse(req.url)
        // 4.2获取url对象client的query属性值:就是前端的表单数据
        let queryData = client.query
        // console.log(queryData)//  user=zhang
        // 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/16153.html

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

相关文章

硬核Vue3响应式原理解析,为你保驾护航渡过寒冬

前言 大家好&#xff0c;我是落叶小小少年&#xff0c;虽然比较菜&#xff0c;虽然才开始写作分享&#xff0c;我始终相信 核心demo更容易理解深的技术点每一次基础的学习都是对知识的巩固 因为从年初就开始使用Vue3了&#xff0c;现在才来学习Vue3&#xff0c;但是也不算晚…

yolo5 训练无人人机识别系统

环境搭建&#xff1a; 安装驱动 点击鼠标右键&#xff0c;如果出现NVIDIA图标&#xff0c;点开&#xff0c;出现如下图片 我的显卡是1650&#xff0c;根据显卡的型号去官网找相应的驱动下载就好了。驱动官网 安装好之后&#xff0c;打开命令行cmd&#xff0c;输入如下指令&a…

登录功能(基于SpringBoot+MP+Vue实现的功能)

目录 前言 一、UserMapper层代码分析 二、UserService层代码分析 1.UserService接口 2.UserServiceImpl实现类 3.UserController层代码分析 4.拦截器设置 5.展示效果图 总结 前言 登录功能是web开发中常见的功能&#xff0c;也是学后端必须要练得一个功能&#xff0c;本…

【JavaWeb】手写一个Servlet+JSP+JavaBean分页

✅✅作者主页&#xff1a;&#x1f517;孙不坚1208的博客 &#x1f525;&#x1f525;精选专栏&#xff1a;&#x1f517;JavaWeb从入门到精通&#xff08;持续更新中&#xff09; &#x1f4cb;&#x1f4cb; 本文摘要&#xff1a;本篇文章主要分享如何使用ServletJSPJavaBean…

C++对象拷贝

前言&#xff1a;本教程使用到的工具是vs2010&#xff1b;能用VC6就用VC6&#xff0c;因为vs2010生成的汇编代码可能有点乱&#xff1b;此外&#xff0c;文章中涉及的汇编&#xff0c;我都会予以解释&#xff0c;所以放心观看。 目录 一、什么是对象拷贝&#xff1f; 二、C对…

【微服务】SpringCloud微服务剔除下线源码解析

&#x1f496; Spring家族及微服务系列文章 ✨【微服务】SpringCloud微服务续约源码解析 ✨【微服务】SpringCloud微服务注册源码解析 ✨【微服务】Nacos2.x服务发现&#xff1f;RPC调用&#xff1f;重试机制&#xff1f; ✨【微服务】Nacos通知客户端服务变更以及重试机制 ✨【…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.4 Redis 下载安装与基本使用

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.4 Redis 下载安装与基本使用4.4.1 问题引入4.4.2 …

Linux Mint(Ubuntu)上 安装 效率神器 utools

Linux Mint&#xff08;Ubuntu&#xff09;上 安装 效率神器 utools 我的 Windows 系统的笔记本只有 256G 固态&#xff0c;磁盘已经快用满了&#xff0c;最近想装个 Linux 玩玩&#xff0c;1 选择了 Linux Mint&#xff0c;然后就在闲置的移动硬盘上安装了 Linux Mint 21 cin…

Centos 安装Java库的多种方式

安装jdk(介绍三种方法) 查看java版本&#xff1a;java -version 方法一&#xff1a;利用yum源来安装jdk&#xff08;此方法不需要配置环境变量&#xff09; 查看yum库中的java安装包 &#xff1a;yum -y list java* 安装需要的jdk版本的所有java程序&#xff1a;yum -y instal…

纯正体验,极致商务 | 丽亭酒店聚焦未来赛道,实现共赢发展

10月28日&#xff0c;锦江酒店(中国区)“齐鲁集锦 共话未来”投资人交流会在济南盛大召开&#xff0c;面向华东地区投资人&#xff0c;行业专家、商旅客、品牌代表齐聚一堂&#xff0c;共同聚焦酒店市场投资新价值&#xff0c;商讨新时代酒店行业新机遇&#xff0c;多维探索酒店…

蓝牙数据包协议解析

1.前言 由于工作需要&#xff0c;初次接触蓝牙。从最基础的知识开始了解。 引用wiki中的介绍&#xff1a; 蓝牙&#xff08;英语&#xff1a;Bluetooth&#xff09;&#xff0c;一种无线通讯技术标准&#xff0c;用来让固定与移动设备&#xff0c;在短距离间交换资料&#xff…

第一章:Spring流程执行步骤

Spring执行流程图 注意观察&#xff1a;每一个执行步骤的结果都会返回到DispatcherServlet &#xff0c;然后再出发调用&#xff0c; 所以是请求接口的入口也是出口。 简单了解几个大类的走的流程和具体功能 DispatcherServlet 类 中文调度应用程序&#xff0c;而Servlet就…

libusb系列-007-Qt下使用libusb1.0.26源码

libusb系列-007-Qt下使用libusb1.0.26源码 文章目录libusb系列-007-Qt下使用libusb1.0.26源码摘要安装编译环境确认需要的文件开始编译错误1&#xff1a;找不到文件错误2&#xff1a;expected错误3&#xff1a;SCM_CREDENTALS错误4&#xff1a;类型冲突错误5 assert断言错误错误…

低代码平台和无代码平台有什么区别

低代码&#xff08;LowCode&#xff09;/无代码(NoCode)”是技术界近几年的热门词汇之一&#xff0c;随着企业数字化发展的深入&#xff0c;越来越多的场景化需求要求企业具备更加灵活敏捷的应用开发能力&#xff0c;传统应用开发模式周期长、技术人员能力要求高&#xff0c;无…

OWASP API SECURITY TOP 10

目录 1. API 安全风险 2. 细说TOP10 1. Broken Object Level Authorization 2. Broken User Authentication 3 Excessive Data Exposure 4 Lack of Resources & Rate Limiting 5 Broken Function Level Authorization 6 Mass Assignment 7 security misconfigura…

redis哨兵系列1

需要配合源码一起康~ 9.1 哨兵基本概念 官网手册yyds&#xff1a;https://redis.io/docs/manual/sentinel/ redis主从模式&#xff0c;如果主挂了&#xff0c;需要人工将从节点提升为主节点&#xff0c;通知应用修改主节点的地址。不是很友好&#xff0c;so Redis 2.8之后开…

同花顺_代码解析_技术指标_EJK

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 EMV ENV EXPMA JF_ZNZX KD KDJ KDJFS EMV 简易波动指标 1.EMV 由下往上穿越0 轴时&#xff0c;视为中期买进参考信号&#xff1b; 2.EMV 由上往下穿越0 轴时&#xff0c;视为中…

根据以下电路图,补全STM32F103RCT6的IO口初始化程序

void KEY_Init(void)//接按键的端口初始化程序 { RCC->APB2ENR|______________; //使能PORTA时钟 JTAG_Set(SWD_ENABLE); GPIOA->CRL&__________________; // PA3设置成下拉输入 GPIOA->CRL|__________________; } void LED_Init(void)//接LED的端…

【Qt】控件探幽——QLineEdit

注1&#xff1a;本系列文章使用的Qt版本为Qt 6.3.1 注2&#xff1a;本系列文章常规情况下不会直接贴出源码供复制&#xff0c;都以图片形式展示。所有代码&#xff0c;自己动手写一写&#xff0c;记忆更深刻。 本文目录QLineEdit探幽1、设置数据/获取数据2、只读&#xff08;re…

【15-项目中服务的远程调用之OpenFeign订单模块与商品模块集成使用OpenFeign的案例】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…