node的学习心得(一)

77 阅读3分钟

初识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的回调使用这个方法

image.png 官方案例,好像看官方也支持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。

  1. once:多个监听器,只触发第一个。
  2. getmaxlisteners:返回当前对象的最大监听器数,也可以通过set来修改
  3. on:进行监听,on(eventName,callback)
  4. off:取消监听

stram

这个是很重要的,所有的流都是emmiter的实例

有4个基本的流:

  1. writable:写入
  2. readable:读
  3. duplex:读写
  4. 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一般不传,回调是成功后,使用

结尾

今天就这样吧,感觉写文章的水平好差,但相信自己会变好的!!!!!