node.js 基础

    技术2025-04-12  11

    node.js 基础

    ** 1、node是单线程的 2、node擅长高并发处 3、node擅长I/O密集型处理 **

    1、nodejs 实现静态服务器

    nodeJS Node.js是一个基于Chrome V8引擎(编译成原生机器码)的让JavaScript运行在服务器端的运行环境,它让JavaScript的触角伸到了服务器端。单线程 NodeJS不会为每个连接客户创造一个新的线程,仅用一个线程

    2、 回顾–nodeJS特性–非阻塞式IO

    io:输入输出 阻塞io:网络请求,数据库处理,文件读取
    非阻塞式IO NodeJS在访问高IO操作后不会等待其完成,而是立即去执行其他代码,操作完成后会使用回调函数返回保证高效的利用当前线程 不造成硬件浪费

    3、 事件驱动

    事件驱动 通过事件来驱动整个程序的进行由于是单线程,所以把高io的操作就会移动到事件队列中等待完,完成后通过回调函数的方式返回给线程来进行处理。这个循环处理的过程称之为:事件环

    4、

    _filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径

    _dirname表示当前执行脚本所在的目录

    fs模块

    fs文件系统用于对系统文件及目录进行读写操作
    readdirSync()同步读取
    同步代码在遇到错误的时候 后面的代码是不会继续进行的,所以我们可以在关键位置捕获错误信息
    // 同步读取文件夹 readdirSync try { let t1 = fs.readdirSync("./") console.log(t1) } catch (error) { console.log(error) }
    异步则不会阻塞代码的执行

    异步调用会将读取任务下达到任务队列,直到任务执行完成才会回调 语法:fs.readdir(path,options,callback(err,files)) path(必选),表示要读取的路径。 options(可选)参数。 callback 是回调函数,第一个err错误信息,data成功内容

    // 异步读取文件目录 fs.readdir("./",(err,ok)=>{ if(err){ console.log("错误:"+err) } console.log(ok) })
    语法:fs.mkdir(path,[mode],[callback(err)])注意不能创建一个已存在的文件夹

    path(必选),表示创建的目录。 mode(可选),表示创建模式。 callback 是回调函数,。err错误信息

    //创建目录 fs.mkdir("./aaa",(err)=>{ if(err){ console.log(err) } console.log("ok") })
    语法:fs.rename(oldname,newname,callback(err))

    oldname(必选),修改的文件路径。 newname(必选)新名字。 callback 是回调函数,err错误信息

    // 修改名字 fs.rename("./aaa","./bbb",(err)=>{ if(err){ console.log(err) } console.log("ok") })
    Node删除目录 rmdir() 注意只能删除空文件夹
    // 删除文件 (智能删除空文件) fs.rmdir("./bbb",(err)=>{ if(err){ console.log(err) } console.log("ok") })
    filename 文件名

    data 要往文件里写的内容,可以是字符串 options可选参数 encoding 编码,默认是utf8。flag写文件的模式 callback 回调方法

    fs.writeFile(filename, data, [options], callback)
    //异步写入 fs.writeFile("./t2.txt","德玛西亚", (err) => { if (err) { console.log(err) } console.log("ok") })
    语法:fs.readFile(“filename“,“encoding”,[callback(err,data)])

    filename(必选),表示要读取的文件名。 encoding(可选),表示文件的字符编码。 callback 是回调函数,用于接收文件的内容。err错误信息,data请求内容

    //异步读取 // fs.readFile("./t2.txt","utf-8", (err,data) => { // if (err) { // console.log(err) // } // console.log(data) // })
    异步删除
    //异步删除 fs.unlink("./t2.txt", (err) => { if (err) { console.log(err) } console.log("删除成功") })

    解决回调地狱:promise asys/awiat 蓝鸟插件…

    promise对象简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作) Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
    // Promise let pro = new Promise((resolve, reject) => { fs.mkdir("./ccc", (err) => { if (err) { reject("错误" + err) } reject("ok") }) }) pro.then((ok) => { console.log(ok) }).catch((err) => { console.log(err); })
    Processed: 0.011, SQL: 9