node.js的核心模块

news2024/11/18 6:01:59

node的核心模块由一些精简而高效的库组成

文章目录

    • 全局对象
      • 全局对象和全局变量
      • process
      • cosole
    • util
      • utils.inherits
      • utils.inspect
    • 事件机制
      • 事件发射器
      • error 事件
      • 继承EventEmitter
    • 文件系统访问
      • fs.readFile(filename,[encoding],[callback(err,data)])
      • fs.readFileSync(filename,[encoding])
      • fs.open(path,flags,[mode],[callback(err,fd)])
      • fs.read(fd,butter,offset,length,position,[callback(err,bytesRead,butter)])
    • HTTP服务器与客户端
      • http服务器
        • http.Sever的事件
        • http.SeverResnet
        • 获取GET请求内容
        • 获取post请求的内容
        • http.ServerResponse
        • HTTP客户端
          • http.request(options,callback) 发送HTTP请求
            • http.ClientRequest(客户端请求)
            • http.ClientResponse(客户端响应)

全局对象

node中的全局对象是global,所有全局变量都是global的对象的属性。
在console中能够直接访问到的对象通常都是global属性的。

全局对象和全局变量

满足以下条件的变量就是全局变量:
在最外层定义的变量
全局对象的属性
隐式定义的变量(未定义直接赋值的变量)
当你定义一个全局变量时,这个变量同时也会成为全局对象的属性,反之亦然。
需要注意的是node.js 不能在最外层定义变量,因为所有用户代码都属于模块,而模块不在最外层。

process

process是一个全局变量,用于描述当前node的进程状态对象,提供一个与操作系统的简单接口。

  • process.argv 命令行参数数组,第一个元素是node ,第二个是脚本文件名,第三个元素开始每个元素是一个运行参数。
    -在这里插入图片描述

  • process.stdout 标准输出流。通常我们使用的console.log()向标准输出打印字符,而process.stdout.write()函数提供了更加底层的接口。

  • process,stdin 标准输入流,初始时是被暂停,要从输入流读取数据就必须恢复流,并且手动添加流的事件响应函数。

process.stdin.resume()

process.stdin.on('data',function(data){
process.stdout.write('read from console:'+data.toString());


})
  • process.nextTick(callback)的功能是为事件循环设置一项任务,node.js会在下次事件循环响应时调用callback。该函数可以将复杂的函数拆散,变成一个个较小的事件。
function dosomething(args,callback){
  somethingComplicated(args);
  callback();
}
dosomething(function onEnd(){
  compute();
});

假设执行compute()和执行somethingComplicated()会消耗很长的时间,在执行dosomething()会调用函数dosomething()然后执行somethingComplicated(),然后再执行回调函数,在函数onEnd()中又会执行compute(),下面用process.nextTick()函数进行改进:

function dosomething(args,callback){
  somethingComplicated(args);
  process.nextTick(callback);
}
dosomething(function onEnd(){
  compute();
});

改进后函数会将其拆分成为两件事情,减少每个事件的执行时间,提高响应速度。

还有很多的process成员,有兴趣的话上http://nodejs.org/api/process.html上了解详情

cosole

用于控制台标准输出

  • cosole.log():向标准输出流打印字符,并且以换行符号结束,
  • console.error():向标准错误流输出
  • console.trace():向标准错误流输出当前的调用栈。

util

utils.inherits

  • util.inherits(constructor,superConstructor)是一个实现对象间原形继承的函数。
    该函数只能继承原形中定义的函数,在构造函数内部创建的属性和函数都不能被继承
ar util = require('util')

function Base(){
  this.name = 'base';
  this.base = '1998';

  this.sayHello = function(){
    console.log('hello'+this.name);
  }
}
Base.prototype.showName = function(){
  console.log(this.name)

}
function Sub(){
  this.name = 'sub';
}
util.inherits(Sub,Base);

var objBase = new Base();
objBase.showName()
objBase.sayHello()
console.log(objBase)


var  objSub = new Sub()
objSub.showName()
//objSub.sayHello()
console.log(objSub)

utils.inspect

  • utils.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转化成为字符串的方法,通常用于调试和错误输出。至少接收一个参数object ,即要转换的对象。
  • showHidden (可选)true 表示会输出更多的隐藏信息,显示更多函数的信息。
  • depth 表示最大的递归的层,指定层数控制信息输出多少
  • colors 如果是true:表示输出格式会以ANSI颜色编码。

更多关于utils 的工具可以访问:https://nodejs.org/api/util.html

事件机制

events是node.js 的重要的模块,是node.js的编程的基石,几乎被所有的模块依赖。

事件发射器

  • events.EventEmitter:的核心是实现发射与事件监听功能的封装。EventEmitter的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常要表达一定的语义,对于每个事件,eventEmitter支持若干个事件监听器。当事件发射时,注册到这个事件的监听器就会被调用,事件参数作为回调函数的参数进行传递。
  • EventEmitter.on(event,listener)为指定事件注册一个监听器,接收一个字符event和一个回调函数listener
  • EventEmitter.emit(event,[arg1],[arg2],[…])发射事件,传递若干个可选择参数到监听事件的参数表中。
  • EventEmitter.once(event,listener)为指定事件执行单次监听,触发监听后立刻解除监听。
  • EventEmitter.removeListener(event,listener)移除指定事件的某个监听。
  • EventEmitter.removeAllListener(event,liatener)移除摸个事件的所有监听

error 事件

EventEmitter定义了一个特殊的事件error,包含了错误的语义,我们在遇到异常的时候会发射error事件。当error事件被发射时,EventEmitter规定如果没有相应的监听器,node.js会把他当做异常,退出程序并打印调用栈。一般要为发射error事件的对象设置监听器,避免遇到错误后整个程序崩盘。

继承EventEmitter

一般情况下不会直接使用EventEmitter,而是在对象中继承它,

文件系统访问

fs模块是文件操作的封装,提供文件的读取,写入,更名,删除,遍历目录等系统操作。
有异步和同步两个版本。

fs.readFile(filename,[encoding],[callback(err,data)])

  • filename 表示要读取的文件名称
  • ecoding (可选)表示文件的字符编码,默认是以Buffer的形式表示的二进制数据
  • callback 表示回调函数 用于接收文件的内容 err 表示有没有发生错误,data表示的文件的内容,

fs.readFileSync(filename,[encoding])

fs.readFileSync是fs.readFile的同步版本。不同之处在于读取到的内容会以函数返回值的形式返回,如果遇到错误就会抛出异常,需要用try 和catch去捕捉异常。

fs.open(path,flags,[mode],[callback(err,fd)])

  • path 文件的路径
  • flag可以是以下信息:
r:以读取的模式打开文章
r+:以读写的模式打开文章
w:以写的模式打开文章,如果文章不存在则创建
w+:以读写的模式打开文章,如果文章不存在则创建
a:以追加的方式打开文章,如果文件不存在则创建
a+:以读取追加的模式打开文件,如果文件不存在则创建
  • mode 用于创建文件时给文件指定权限,默认是0666,回调函数将会传递一个文件描述符fd

fs.read(fd,butter,offset,length,position,[callback(err,bytesRead,butter)])

相比fs.readFlie() 提供了一个更加底层的信息 ,fs.read的功能是从指定的文件描述符中fd读取数据并且写入buffer指向的缓冲对象。offset是buffer的写入偏移量。length表示要从文件中取出的字节数。position 是文件的读取的起始位置,如果position的值为null,表示从文件的指针的位置读取。回到函数的bytesRead和buffer表示读取数据的字节数和缓冲对象。
如下图为fs的所有函数的定义和功能。
在这里插入图片描述

HTTP服务器与客户端

http服务器

http.Server是http模块的http服务对象,用node.js做的所有基于http协议的系统,都是http.Server实现的,

http.Sever的事件

提供了以下事件:

  • request:当客户端请求到来时,改事件会被触发,提供两个参数req 和res 表示请求和响应信息。
  • connection:当TCP连接建立时候,该事件会被触发。
  • close:当服务器关闭的时候会被触发。
  • http.creatEServer([requestListener])

http.SeverResnet

是http的请求信息,是http.Sever的request事件发送的第一个参数,具体的属性有:
在这里插入图片描述http的请求一般包括请求头部和请求体,请求头部比较短,不需要解析很长时间,但是请求体比较长,需要要事件控制:

  • data:请求体到来时,事件被触发,参数Chunk:表示接收到的信息。如果该事件没有被监听。收到的信息就会被抛弃。
  • end :请求数据传输完成后会触发的事件
  • close:用户请求完成后,事件被触发,用户提前终止

获取GET请求内容

node.js中的URL模块的parse函数提供了手动解析后面的内容作为GET请求的参数。

获取post请求的内容

post的请求的内容全部在请求体内,http.ServerRequest没有一个属性内容为请求体,是因为等待请求体传输是一件很耗时的工作,所以node.js默认不会解析请求体,当需要请求体时候,需要手动解析。

http.ServerResponse

http.ServerResponse是返回给客户端的信息,决定了用户最终能够看到的结果。是http.Sever的request事件发送的第二个参数:response或者res’

  • response.writeHead(statusCode,[headers]):向请求的客户端发送响应头,statusCode表示HTTP的状态码如:200(请求成功);404(未找到)等;headers表示响应头部的每个属性,该函数在一个请求内最多只能调用一次,如果不调用,则会自动生成一个响应头。
  • response.write(data,[encording]):向请求客户端发送响应内容:data:是一个buffer或者是字符串,表示要发送的内容,如果data是字符串,需要指定encording来说明编码方式,默认:utf-8
  • response.end(data,[encording]):结束响应,当要返回的值被发送完毕后,该函数必须被调用一次,如果不调用,客户端永远在等待状态。

HTTP客户端

http.request(options,callback) 发送HTTP请求
  • options:表示请求参数
host请求网站的域名或者是IP地址
port请求网站的端口,默认:80
method请求方式:默认是GET
path请求的相对路径
headers一个关联的对象,为请求的头的内容
  • callback:表示请求回调函数,
http.ClientRequest(客户端请求)

是http.get或者是http.request的返回值,表示一个已经产生而且正在进行的http请求。提供了一个response事件,即http.request或者是http.get第二个参数指定的回调函数绑定的对象,。
提供了write和end函数用于向服务器发送请求体。还提供了:

  • request.abort() 终止正在发送的请求
  • request.setTimeout(timeout,[callback]):设置请求超时时间,timeout为毫秒单位。当请求超时以后,callback将会被调用。
http.ClientResponse(客户端响应)

与http.ServerRequest相似,提供了三个事件:data ,end和close 分别再数据到达,传输结束和连接结束触发,其中data事件传递的一个参数chunk,表示接收的数据信息
http.ClientResponse也提供了一些属性,用于表示请求的结果状态。
在这里插入图片描述
http.ClientRespanse还提供了几个特殊的函数:

  • response.setEncoding([encoding]):设置默认的编码
  • response.pause():暂停接收数据和发送事件
  • response.resume():从暂停的状态恢复。

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

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

相关文章

NSSCTF (2)

[GKCTF 2020]cve版签到 查看响应头发现有几个可能利用的信息 1.hint 里面的Flag in localhost 2.apache 2.4.38 3. php 7.3.15 我们发现第一个是提示 第二个apache版本没有什么漏洞 但是php 7.3.15 存在cve漏洞 这里题目规定 *.ctfhub.com 所以我们 要以这个结尾 在 p…

05-事务管理

概念: 事务是一组操作的集合,它是不可分割的工作单位,这些操作要么同时成功,要么同时失败 操作: 开启事务(一组操作开始前,开启事务) : start transaction / begin ; 提交事务(这组操…

【LeetCode】1000题挑战(230/1000)

1000题挑战 没有废话,直接开刷! 目录 1000题挑战 没有废话,直接开刷! 第一题:242. 有效的字母异位词 - 力扣(Leetcode) 题目接口: 解题思路: 代码: …

罗马数字转整数:探究古代数字编码的奥秘

本篇博客会讲解力扣中“13. 罗马数字转整数”这道题的解题思路。 大家先来审下题:题目链接。 题干如下: 有几个输出样例: 提示如下: 大家先思考一下,再来听我讲解。 本题的关键是:如何把罗马数字转换…

文末赠书3本 | 盼了一年的Core Java最新版卷Ⅱ,终于上市了

文章目录 盼了一年的Core Java最新版卷Ⅱ,终于上市了!Core Java基于Java 17全面升级Core Java最新版卷Ⅱ现已上市卷Ⅰ、卷Ⅱ有何不同?如何阅读《Java核心技术》从未远离工业界的Java大神带你学50位行业专家、技术媒体赞誉推荐如何选择版本文末…

Python基础入门(2)—— 什么是控制语句、列表、元组和序列?

文章目录 01 | 🚄控制语句02 | 🚅列表03 | 🚈元组04 | 🚝序列05 | 🚞习题 A bold attempt is half success. 勇敢的尝试是成功的一半。 前面学习了Python的基本原则、变量、字符串、运算符和数据类型等知识&#xff0c…

树形结构——堆的构建

在学习完我们的树形结构之后我们再来使用树形结构的思想构建一个堆。使用堆可以对我们的数据进行排序,并且堆排序的效率要远优于我们之前学习过的冒泡排序。下面我们来逐步实现堆这个数据结构。 在构建堆之前我们需要先介绍以下我们树形结构构建的两种形式&#xff…

掌握这些GitHub搜索技巧,你的开发效率将翻倍!

作为开发it行业一员,学习借鉴他人项目是很有必要的,所以我们一般都会从github或者 Gitee 上面去参考借鉴他人的项目来学习增加自己的项目经验 但是一般我还是在github上看项目比较多,毕竟人家实力项目量摆在那里 ,但是国内访问gi…

Spring Cloud的那些组件和功能,get到了吗

Spring Cloud 是 Spring 技术栈生态很重要的一部分,面向大型网站服务端的开发和架构设计,它以 Spring/SpringBoot 为基础,提供的一系列组件规范和具体实现。 一、概述 Spring Cloud 提供了用于更快速构建分布式系统的基础规范(例…

“深入”理解字节对齐

文章目录 前言思考查阅资料[Byte alignment and ordering](https://www.eventhelix.com/embedded/byte-alignment-and-ordering/)Byte Alignment RestrictionsWhy Restrict Byte Alignment?Compiler Byte PaddingUser Defined StructureActual Structure Definition Used By t…

使用SaleSmartly自动化流程的 5 个原因

想象一下,如果您可以采用智能数字解决方案来减轻团队和公司的手动和重复业务流程负担。它可以帮助您节省时间、提高公司的底线、消除冗余并增强数据管理。SaleSmartly(ss客服)就是这样。 通过利用自动化的力量,SaleSmartly&#x…

牛客网专项练习Pytnon分析库(一)

1.提取出a和b两个数组中的公共项,可以使用numpy库中的哪个函数(A)。 A.np.intersect1d(a,b) B.np.setdiff1d(a,b) C.np.where(a b) D.np.lexsort((a,b)) 解析: A选项,np.intersect1d用来获取数组a和数组b之间的公共项&…

MySQL遇到过死锁问题吗,你是如何解决的?

MySQL遇到过死锁问题吗,你是如何解决的? 问题解析 死锁,就是两个或者两个以上的线程在执行过程中,去争夺同一个共享资源导致互相等待的现象。 在没有外部干预的情况下,线程会一直处于阻塞状态,无法往下执行…

理解FPGA的基础知识——逻辑电路

FPGA (Field Programmable Gate Aray,现场可编程门阵列)是一种可通过重新编程来实现用户所需逻辑电路的半导体器件。为了便于大家理解FPGA的设计和结构,我们先来简要介绍一些逻辑电路的基础知识。 1.逻辑代数 逻辑代数中的变量称为逻辑变量,用大写字母表…

Arduino ESP32 ESP-Rainmaker点灯示例

Arduino ESP32 ESP-Rainmaker点灯示例 📌基于ESP-IDF工程相关篇《ESP32 ESP-Rainmaker 本地点灯控制Demo测试》🎈原项目地址:https://github.com/espressif/esp-rainmaker🔖本次所测试的项目示例工程:\esp-rainmaker—…

backtrader的cs功能介绍

cs框架的优点和缺点 优点和ts一样,就是速度非常快缺点有好几个:必须使用根据过去一定天数计算因子值,持有一定天数之后再平衡的模式;必须使用连续的数据,如果是期货期权等需要合成连续数据。资金不足的时候不会拒单。cs框架使用方法 设计理念 计算因子由用户进行计算,因…

用科技创造未来!流辰信息技术助您实现高效办公

随着社会的迅猛发展,科技的力量无处不见。它正在悄悄地改变整个社会,让人类变得进步和文明,让生活变得便捷和高效。在办公自动化强劲发展的今天,流辰信息技术让通信业、电网、汽车、物流等领域的企业实现了高效办公,数…

工具及方法 - 安装播放器pot player

官网下载: potplayer.daum.net 可能国内访问有问题,还有一个网站: Global Potplayer 或者为了纯净安全些,找下国外可下载网站: PotPlayer 230407 / 230504 Beta Free Download - VideoHelp 下载后安装即可&#xff…

红蜻蜓利用档案数字化管理,实现业务管理降本增效

在数字化大背景下,红蜻蜓积极拥抱数字化档案,全面优化档案管理成本,保证组织档案安全可信,助力企业业务高质量发展。 关于红蜻蜓 红蜻蜓,创始于1995年,是一家多品牌、多品类的时尚鞋履品牌运营商&#xf…

欧科云链OKLink:2023年4月安全事件盘点

一、基本信息 2023年4月安全事件共造约6000万美金的损失,与上个月相比,损失金额有所降落,但安全事件数量依旧不减。其中,Yearn Finance因参数配置错误,导致了1000多万美金的损失。同时,有一些已经出现过的…