node

本文详细介绍了Node.js的基础知识,包括其定义、优缺点,以及如何使用REPL交互式解释器运行JS文件。重点讲解了模块化、文件系统操作如读取、创建、改名和删除目录,以及处理回调地狱的方法。同时,阐述了HTTP模块在创建服务器中的应用,并简要提及了Express框架及其路由和中间件的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一·node

1·1:什么是node

node是一个基于chromeV8引擎的javascript的服务器端运行环境 让javascript的触角深入到服务器端,即就是js语言可以独立于浏览器进行运行

1·2:node的优缺点:

通过这三点优势突出了node的 快

  • 单线程:高并发使得node让cpu的利用率可以达到100%
  • 非阻塞式i/o 就是node在访问高io(输入输出)的应用的时候 不会等待着它的完
  • 事件驱动 把高io的操作放到一个事件列队当中 完成后通过回调函数的方式在进入到线程里 事件环

所以node一般适合开发高并发的,高i/o的

不适合开发一些对稳定性要求较高的应用【银行,医院,电力等】

二:node的使用:

2·1:REPL交互性解释器

可以让我们在终端CMD输入命令 node来解析js,让js脱离浏览器单独运行

打开cmd 在电脑上安装了node的情况下 输入node 回车 就可以单独的运行js了

2·2:node 如何运行js文件
2·2·1:魔术变量
  • _ _filename 查看当前运行文件的文件的绝对路径

  • _ _dirname 查看当前运行文件的文件夹的绝对路径

第一: cd到要运行的文件的文件夹中

第二:使用 node空格文件名来进行运行

2·3:模块
2·3·1:模块化的区分

模块主要分为commonjs模块化和es6的模块化

  • commonjs的模块化

    引入: require()

    引出: module.exports / exports

  • ES6的模块化

    引入:import from

    引出:export/ export default

2·3·2:为什么要写模块?
js有作用域问题  变量和方法只能在当前的这个文件中进行使用  所以如果想复用的话我们就必须要使用模块
2·3·3:模块的优势?

​ 少了代码的重复,提高了复用率

​ 划分功能 方便管理

​ 方便使用第三方模块

三:node的内置模块

3·1:fs模块:

文件系统模块 对电脑上的系统文件或者目录进行读写操作

3·2:目录
3·2·1读取目录
  • 同步读取:readdirSync()

    同步代码 在遇见错误的时候错误代码后面的内容就不会继续运行了
    那么我就是想让错误的内容后面的继续运行怎么办?

    使用 错误捕获 try catch

    let fs=require("fs")
    try {
        // 可能会错的代码
        let dirs=fs.readdirSync("./")
        console.log(dirs)
    } catch (error) {
        // 错了之后怎么办?
      console.log("俨然已经错了")
    }
    
  • 异步读取:readdir()

    fs.readdir(你要读取的路径,可选参数,回调函数)

    异步操作有一个错误优先原则

    let fs=require("fs")
    fs.readdir("./",(err,ok)=>{
        if(err){
            console.log("读取错啦")
        }else{
            console.log(ok)
    
        }
    })
    
    //使用promise封装
    let fs=require("fs")
    function rd(){
        return new Promise((resolve,reject)=>{
            fs.readdir("./",(err,ok)=>{
                // 异步操作有一个错误优先原则
                    // 如果没有错误就是null
                if(err){
                    reject("读取错啦")
                }else{
                    resolve(ok)
    
                }
            })
        })
    }
    
    rd().then((ok)=>{
        console.log(ok)
    }).catch((err)=>{
        console.log(err)
    })
    
3·2·2:创建目录
  • mkdir()异步创建

  • mkdirSync() 同步创建

3·2·3:改名字

rename(你要改那个的路径,改成什么,回调)

let fs=require("fs")
fs.rename("./bb","cc",(err,ok)=>{
    if(err){
        console.log("错啦")
    }else{
        console.log("成功!!!!")
    }
})
3·2·4:删除目录

rmdir()

删除目录只能删除空文件夹

let fs=require("fs")
fs.rmdir("./aa",(err,ok)=>{
    if(err){
        console.log("没有删除成功")
    }else{
        console.log("删除成功了")
    }
})
3·3:文件
3·3·1:写入writeFile()
3·3·2:读取readFile()
3·3·3:删除unlink()
let fs=require("fs")
fs.unlink("./cc/小明.html",(err,ok)=>{
    if(err){
        console.log("删除失败")
    }else{
        console.log("删除成功!!!!")
    }
})

四:回调地狱

4·1:什么是回调地狱?

回调函数层层的嵌套 因为node是非阻塞io 就是node中经常有回调地狱

4·2:解决方式:

promise asyc/awiat 蓝鸟插件

4·3:promise

promise对象是一个容器,在它里面保存的就是一些以后未来才会完成的内容 (通常是一些异步操作)promise就可以吧异步操作以同步的方式展示出来 就避免了回调函数层层嵌套 让我们的使用更加方便

// let fs=require("fs")
// fs.readdir("./",(err,ok)=>{
//     // 异步操作有一个错误优先原则
//         // 如果没有错误就是null
//     if(err){
//         console.log("读取错啦")
//     }else{
//         console.log(ok)

//     }
// })


let fs=require("fs")

function rd(){
    return new Promise((resolve,reject)=>{
        fs.readdir("./",(err,ok)=>{
            // 异步操作有一个错误优先原则
            if(err){
                reject("读取错啦")
            }else{
                resolve(ok)

            }
        })
    })
}

rd().then((ok)=>{
    console.log(ok)
}).catch((err)=>{
    console.log(err)
})

五:HTTP模块

http模块是node中核心模块 创建服务器

createServer() 创建服务器

let http=require("http")

// 2.创建服务
// 形参:req:请求, res:响应
http.createServer((req,res)=>{
    // 返回响应头
    res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"})
    // 设置返回内容
    res.end("我是一个服务器")
}).listen(3000)

六:express

express是一个灵活的nodejs的应用框架 它里面提供了大量的丰富的http工具

  • npm下载

  • 创建基本的服务

    let express=require("express")
    let app=express()
    // 创建服务
    app.get("/hhhh",(req,res)=>{
        res.send({msg:"我是第一个接口"})
    })
    // 端口
    app.listen(3030)
    
6·1:express 路由与中间件

中间件:app.use(“地址”,方法)

无论你要进入那个位置的时候都会先经过我

路由 就是根据url的不同与相应不同的请求

index.js

let express=require("express")
let app=express()
// 引用路由文件
let r1=require("./routers/1.js")
let r2=require("./routers/2.js")

// 分发路由
app.use("/index",r1)
app.use("/login",r2)

// 端口
app.listen(3000)

routers文件夹下的1.js

let express = require("express")
// 调用路由
let router = express.Router()
// 设置路由
router.get("/room", (res, req) => {
    res.send("首页的数据")
})
module.exports = router

routers文件夹下的2.js

let express = require("express")
// 调用路由
let router = express.Router()
// 设置路由
router.get("/login", (res, req) => {
    res.send("登录的数据")
})
module.exports = router
/ 调用路由
let router = express.Router()
// 设置路由
router.get("/room", (res, req) => {
    res.send("首页的数据")
})
module.exports = router

routers文件夹下的2.js

let express = require("express")
// 调用路由
let router = express.Router()
// 设置路由
router.get("/login", (res, req) => {
    res.send("登录的数据")
})
module.exports = router
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值