初识node
node内含一个v8引擎,然后通过node的binding,将任务放到libuv(一个用c写的库,包含了事件循环,文件系统的读写等)的事件循环中来,node其实大概就是下面这几个模块 fs(文件模块),stream(流),emitter(类似于事件总线),buffer(最贴近底层的,进制转换),http(服务器)。
处识fs模块
首先因为是在node的环境中,使用的是commom.js规范,我们要使用require来获取该模块,具体文档点这里
const fs=require('fs')
这里就介绍几个最基本的读写功能,api太多了,有兴趣可以点上面的链接自己去查询
const fs=require('fs')
fs.readFild(path,buffer,[...option],callback)
//分别是路径,写入内容,一些api,回调函数,回调第一个参数一般都是err
option:{
encoding:默认utf8 这个是代码转换格式
flat:可以决定阅读,还是读写默认r,推荐a+
signal:可以中止阅读
}
fs.writeFild(path,buffer,[...option],callback)
//和上面一样,但是option多了个mode,signal默认值为w
查看flag具体属性内容点这 其实fs也支持promise的回调使用这个方法
官方案例,好像看官方也支持Esmodule规范了。
const { unlink } = require('node:fs/promises');
(async function(path) {
try {
await unlink(path);
console.log(`successfully deleted ${path}`);
} catch (error) {
console.error('there was an error:', error.message);
}
})('/tmp/hello');
好像还有个在方法后加sync的方法,但好像是同步的,async才是异步
初识buffer模块
这其实就是一个进制转换的模块,因为底层都是二进制,所以需要转换,但是为了方便观看还是节省内存啥的,使用了16进制存储,但是都是通过他来转换。
突然想起来他可以设计这个文件的内存,默认是给8kb,然后慢慢往里面填充,但是有的太大了,他的一半还大于8kb把,就直接给他全部内存,否则都是创建一个8kb的池子,后面都是往里面慢慢填充。
ps.这方面其实就是理论
初识emmiter模块
获取模块还是和上面的内容一样,他就是node里的事件总线,他会通过监听事件来触及相应的回调函数,下面说些api。
- once:多个监听器,只触发第一个。
- getmaxlisteners:返回当前对象的最大监听器数,也可以通过set来修改
- on:进行监听,on(eventName,callback)
- off:取消监听
stram
这个是很重要的,所有的流都是emmiter的实例
有4个基本的流:
- writable:写入
- readable:读
- duplex:读写
- transform:上面duplex的读写时修改或转换的流
其实fs文件有stream的相关api,可自行去查看。
初识http模块
这个其实就是我们平常的说的服务器了 通过createServer(callback)来创建一个服务器,然后通过里面回调来处理。
const serve=createServer ((req,res)=>{
//第一个参数是传过来的,第二个是要返回去的,最后要用过end或者close关闭吧
//通过引入url,querystring的parse来解析req的url,querystring内容
//但是body的内容这样是获取不到的,要通过req.on('data',(data)=>{}),监听data事件,来获取data的内容,也可以监听end事件来,回调的时候触发
//通过res.statusCode来设计返回的状态码
})
我们会用过listen来开启服务器
const serve.listen(port,host,callback)
//port是监听接口,host一般不传,回调是成功后,使用
结尾
今天就这样吧,感觉写文章的水平好差,但相信自己会变好的!!!!!