1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Node.js:详解(--内置模块(http fs)

Node.js:详解(--内置模块(http fs)

时间:2022-11-17 16:26:00

相关推荐

Node.js:详解(--内置模块(http fs)

目录

1:Node.js

1.1:什么是node.js

1.2:Node.js中的Javascript运行环境

1.3:Node.js可以做什么

1.4:Node.js的学习路径

1.5:查看已安装的Node.js的版本号

介绍

2:http模块:

2.1:http总结图

2.2:什么是http 模块

2.3:用http创建web服务器

3:fs模块

3.1:fs总结图

3.2:fs详解

3.3:常见api

3.4:同步和异步

3.5:文档流

1:Node.js

1.1:什么是node.js

Node.js 的官网地址: /zh-cn/Node.js是一个Javascript运行环境(runtime),发布于5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。

首先要清楚Node不是一个Web服务器,这十分重要。它本身并不能做任何事情。它无法像Apache那样工作。如果你希望它成为一个HTTP服务器,你必须借助它内置库自己编写。Node.js只是计算机上执行代码的另一种方式,它是一个简单的JavaScript Runtime.

简单的说 Node.js 就是运行在服务端的 JavaScript。

Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

1.2:Node.js中的Javascript运行环境

1.3:Node.js可以做什么

具有复杂逻辑的网站基于社交网络的大规模web应用web Socket网站TCP\UDP套接字应用程序命令行工具交互式终端程序带有图形用户界面的本地应用程序单元测试工具客户端Javascript编译器基于 Electron 框架(/),可以构建跨平台的桌面应用基于 restify 框架(/),可以快速构建 API 接口项目读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…

node最大的特点是采用异步式I\O与事件驱动

异步式 I/O 与事件驱动

Node.js 使用的是单线程模型,对于所有I/O都采用异步式的请求方式,避免了频繁的上下文切换。Node.js 在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式 I/O 请求完成后会被推送到事件队列,等待程序进程进行处理。

Node的异步机制是基于事件的,所有的磁盘I/O,网络通信,数据库差选都是以非阻塞的的方式来请求,返回的结果有事件循环来处理,如图所示

Node.js 进程在同一时刻只会处理一个事件,完成后立即进入事件循环检查并处理后面的事件。这样做的好处是,CPU和内存在同一时间集中处理一件事,同时尽可能让耗时的I/O操作并行执行。对于低速连接攻击,Node.js只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。

最重要的是:Node中的js不需要考虑浏览器的兼容问题!!!

原文链接:/m0_37938910/article/details/103673105/

1.4:Node.js的学习路径

JavaScript 基础语法 →Node.js 内置 API 模块(fs、path、http等)

1.5:查看已安装的Node.js的版本号

cmd 输入node -v查看版本号

或shift+鼠标右键打开PowerShell

介绍

Node.js中有很多内置模块,下面讲的就是http服务器模块以及fs文件系统模块,是node的核心模块之一。

安装好node.js后,引入模块,除了内置模块,还可以自定义模块,使用module.exports和 exports

2:http模块

HTTP协议

超文本传输协议,是客户端浏览器和Web服务器之间的通信协议。由四部分组成:

(1)通用的头信息(general)

Request URL:要请求的资源

Request Method:对资源的操作方式

get获取

post新建

delete删除

Status Code: 响应的状态码:

1**:接受了请求,还没做出响应

2**:成功响应

3**:响应的重定向,发生跳转

4**:客户端错误

5**:服务器端错误

(2)响应的头信息(response)

Location:要跳转的URL,通常结合状态码302来使用

Content-Type:内容类型,解决中文乱码 text/html;charset=utf-8

(3)请求的头信息(request)

(4)请求体,只有涉及到数据传递才会出现。

2.1:http总结图

2.2:什么是http 模块

1、什么是http 模块

在网络节点中,负责消费资源的电脑,叫做客户端;负责对外提供网络资源的电脑,叫做服务器。

服务器和普通电脑的区别在于,服务器上安装了 web 服务器软件,例如:IIS、Apache 等。通过安装这些服务器软件,就能把一台普通的电脑变成一台 web 服务器。

http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务。

在 Node.js 中,我们不需要使用 IIS、Apache 等这些第三方 web 服务器软件。因为我们可以基于 Node.js 提供的 http 模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供 web 服务。

2.3:用http创建web服务器

要开发HTTP服务器程序,从头处理TCP连接,解析HTTP是不现实的。这些工作实际上已经由Node.js自带的http模块完成了。应用程序并不直接和HTTP协议打交道,而是操作http模块提供的request和response对象。

request对象封装了HTTP请求,我们调用request对象的属性和方法就可以拿到所有HTTP请求的信息;response对象封装了HTTP响应,我们操作response对象的方法,就可以把HTTP响应返回给浏览器。

(1)导入http模块

const http = require('http');

(2)创建web服务器实例

const server = http.createServer();

(3)为服务器绑定request事件,监听客户端的请求//接受请求并做出响应

server.on('request',((req, res) =>

req 请求的对象req.url 请求的服务器端的资源req.method 请求的方法res 响应的对象res.writeHead( ) 设置响应的状态码和头信息res.write( ) 设置响应的内容res.end( ) 结束并发送响应

console.log('hello http')

}))

(4)启动服务器

server.listen(8080);//设置端口

console.log("http server is running on port 8080")

完整代码:

const http = require('http');const server = http.createServer();server.on('request',(req, res) => {console.log('hello http')})server.listen(8080);console.log("http server is running on port 8080")

3:fs模块

3.1:fs总结图

3.2:fs详解

fs 模块是文件系统模块:用于文件操作,分文件形式和目录形式,使用前需先导入 fs 模块:

const fs = require('fs');

3.3:常见api

3.4:同步和异步

基本上所有方法都有异步和同步,基本上同步的方法 都是在异步方法后面加上 Sync

//1.读取文件//异步//fs.readFile("url文件路径","utf8 编码格式,可以省略,但是文件内容会以buffer字节显示",(err,data)=>{})fs.readFile('./01.js','utf8',(err,data) =>{console.log(err); //没有读取的文件的错误console.log(data.toString()); //读取到的文件})//同步,其他的我就不说了,基本一样let data = fs.readFileSync("./07.js","utf8");console.log(data);//没有读取到报错//2.写入文件//异步fs.writeFile("./abs.json","写入的内容",(err) => {console.log(err);//如果有错 抛出错误 否则 打印写入成功})//要注意的是,如果没有此文件,会自动生成这个文件,并且写入//3.追加文件//异步fs.appendFile("./abs.json",'追加的数据"}',"utf8",(err)=>{console.log(err);//如果有错 抛出错误 否则 打印追加成功})//4.创建文件夹目录//异步fs.mkdir("./tmp/",(err)=>{console.log(err);//如果有错 抛出错误 否则 打印创建成功})//5.读取文件夹//异步fs.readdir("./",(data,err)=>{console.log(err);console.log(data);//返回一个包含文件名和文件夹名称的数组 ['01.js','src'...]})//6.查看文件夹详细信息//异步fs.stat("./01.js",(err,data)=>{console.log(err);//如果有错 抛出错误console.log(data);// Stats {//dev: 0,//mode: 33206,//nlink: 1,//uid: 0,//gid: 0,//rdev: 0,//blksize: 4096,//ino: 13019099872,//size: 593,//blocks: 16,//atimeMs: 1594483200000,//mtimeMs: 1594027342000,//ctimeMs: 3373865674955.1616,//birthtimeMs: 1594038970470,//atime: -07-11T16:00:00.000Z,//mtime: -07-06T09:22:22.000Z,//ctime: 2076-11-29T08:54:34.955Z,//birthtime: -07-06T12:36:10.470Z// }//判断文件是否是文件夹目录console.log(data.isDirectory());//用于检测是否是文件console.log(data.isFile());})//7.重命名 1.改名 2.剪切文件(移动)//异步fs.rename("o1s.js","01.js",(err)=>{console.log(err);})//8.删除目录rmdir 这个方法只能删除目录,不能删除文件//异步fs.rmdir("./tmp",{recursive :true},(err)=>{console.log(err);})//9.删除文件//异步fs.unlink("./src/01.txt",(err) =>{console.log(err);})//10.管道流fs.createReadStream用于从文件流中读取数据1fs.createReadStream(path[, options])//读取的文件比较大时建议用流的方式读取,文件比较大会多次读取let readStream = fs.createReadStream("data.json");let obj = "";readStream.on('data',(chunk)=>{obj += chunk})//读取成功readStream.on('end',()=>{console.log(obj);})//读取失败readStream.on('error',(err)=>{console.log(err)})//fs.createWriteStream用于向文件中写入内容。//利用createReadStream()和createWriteStream()可以实现一个管道流,读取一个文件的内容,并写入到另外一个文件中。原文链接:/ANGWH/article/details/107299786

3.5:文档流

(1)createReadStream( ) 创建可读取的文件流,分段读取数据

(2)createWriteStream( ) 创建可写入的文件流

(3)pipe( ) 管道,可以将读取的文件流添加到写入的文件流

//引入fs模块const fs = require('fs');//创建一个可读取的文件流let rs = fs.createReadStream('./061133.rar');//创建一个可写入的文件流,即使文件不存在也会自动创建let ws = fs.createWriteStream('./061101.rar');//把读取的文件流通过管道添加到写入的文件流rs.pipe(ws);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。