Nodejs的三大核心模块

657 阅读5分钟

Nodejs的三大核心模块

1 fs文件模块(读写文件)

1.1 readFile读取文件

//1.导入文件模块
const fs = require('fs')

//2.读取文件

/**
 * 第一个参数:文件路径
 * 第二个参数:编码格式 (可选参数,默认为buffer二进制)
 * 第三个参数:读取回调操作(异步操作)
    * err:如果读取成功,err为null,  否则读取失败(一般文件路径错误或者找不到文件)
    * data:读取到的数据
 */
fs.readFile('./data/aaa.txt','utf-8',(err,data)=>{
    if(err){
        console.log(err)
        //抛出异常,throw的作用就是让node程序终止运行,方便调试
        throw err
    }else{
        console.log(data)
    }
})

console.log('11111')

//3.同步读取文件(了解即可,几乎不用,一般在异步的api后面加上Sync就是同步)

let data = fs.readFileSync('./data/aaa.txt','utf-8')
console.log(data)

console.log('2222')

1.2 writeFile写入文件

//1.导入文件模块
const fs = require('fs')

//2.写文件

/**
 * 第一个参数:文件路径
 * 第二个参数:要写入的数据
 * 第三个参数:文件编码 默认utf-8
 * 第四个参数: 异步回调函数
    * err:  如果成功,err为null.否则读取失败
 */
fs.writeFile('./data/bbb.txt','黑马程序员','utf-8',(err)=>{
    if(err){
        throw err
    }else{
        console.log('写入成功')
    }
})

附: fs模块一些方法

image.png

1.3 同步与异步区别

1.3.1 js编译器解析流程

  1. 编译器从上往下依次'解析'代码
  2. 判断是同步还是异步
  3. 如果是同步,则立即执行
  4. 如果是异步,则不执行,而是放入事件队列中
  5. 所有代码解析完毕之后,开始执行事件循环中的异步代码

1.3.2 同步与异步的区别

  1. 同步会阻塞线程,异步不会;
  2. 同步有序执行,异步无序执行;
  3. 同步没有回调函数,异步有回调函数.

2 path路径模块

2.1 nodejs中的相对路径介绍

  • node中的相对路径: ./ 不是相对于当前文件所在路径,而是相对于执行node命名的文件夹路径 在服务端开发中,一般不要使用相对路径,而使用绝对路径

  • 解决方案:在nodejs中,每一个js文件都有两个全局属性,它可以帮助我们获取到文件的绝对路径

    • __filename:当前js文件所在目录的绝对路径
    • __dirmame:当前js文件的绝对路径
//1.导入文件模块

const fs = require('fs')

//2.读取文件

/*a.注意点: node中的相对路径: ./  不是相对于当前文件所在路径,而是相对于执行node命名的文件夹路径
在服务端开发中,一般不要使用相对路径,而使用绝对路径
  b.解决方案:在nodejs中,每一个js文件都有两个全局属性,它可以帮助我们获取到文件的绝对路径
    __filename:当前js文件所在目录的绝对路径
    __filema,e:当前js文件的绝对路径
*/
console.log(__dirname)
console.log(__filename)

/*2.如果想要获取当前文件夹下其他文件绝对路径,可以使用 __dirname属性来拼接
*/

const path = __dirname + '/aaa.txt'
console.log(path)

fs.readFile(path,'utf-8',(err,data)=>{
    if(err){
        console.log(err);
        //抛出异常,throw的作用就是让node程序终止运行,方便调试
        throw err
    }else{
        console.log(data)
    }
})

2.2 path路径模块拼接路径

//1.导入路径模块
const path = require('path')

//2.合并路径

/*使用path模块拼接文件路径与  使用 '+'连接符拼接的好处
    1.会自动帮我们正确添加路径分隔符  '/',我们无需手动添加
    2.当我们路径格式拼接错误的时候,能自动帮我们转换正确的格式
*/

// path.join(路径1,路径2,路径3,……………………)
let filePath = path.join(__dirname,'aaa.txt')
console.log(filePath)

console.log(__dirname + '/aaa.txt')

let path1 = path.join(__dirname,'bbb','ccc.txt')
console.log(path1);

//获取上级目录   path.dirname(文件路径)
let path2 = path.dirname(path1)
console.log(path2)

let path3 = path.dirname(path2)
console.log(path3)

let path4 = path.dirname(path3)
console.log(path4)

2.3 path模块一些方法

image.png

3 http模块(搭建服务器)

3.1 http模块搭建服务器

const http = require('http')

//2.创建服务器(运行软件)

/* 参数:回调函数
    req: request 客户端请求对象
    res:response 服务端响应对象
 */
let server = http.createServer((req,res)=>{
    //获取客户端请求路径
    console.log(req.url)
})

//3.启动服务器(开启软件的服务器功能)

/*第一个参数:端口号  一般1000-60000之间
第二个参数:ip地址  默认不写 就是本地ip 
第三个参数:成功回调
 */
server.listen(3000,()=>{
    console.log('服务器开启成功')
})

3.2 响应客户端请求

/* WEB开发本质
    请求
    处理
    响应
*/

//1.导入模块
const http = require('http')
//2.创建服务器
/* 
req:请求对象 负责处理客户端请求
res:响应对象 负责响应客户端请求
*/
let server =  http.createServer((req,res)=>{
    //客户端每发送一个请求,这个函数都会执行一次(执行多次)
    console.log(req.url)
    //响应客户端数据
    res.end('hello world')
})

//3.启动服务器
server.listen(3000,()=>{
    console.log('服务器开启成功')
})

3.3 根据不同请求响应不同数据

//1.导入模块
const http = require('http');
//2.创建服务器
let server =  http.createServer((req,res)=>{
    console.log(req.url)
    //需求: 如果请求路径是/ ,响应  index   如果请求路径是/login,响应 登录页
    if(req.url == '/'){
        res.end('index.html')
    }else if(req.url == '/login'){
        //设置响应头解决中文乱码问题: 响应头作用:告诉浏览器我返回给你的数据是什么类型
        /*第一个参数:状态码
        第二个:响应头 
        */
        res.writeHead(200,{
            'Content-Type': 'text/plain;charset=utf-8'// text/plain 普通文本
        })
        res.end('登录页')
    }else{
        res.end('404 not found')
    }

})

//3.开启服务器
server.listen(3000,()=>{
    console.log('服务器开启成功')
})

3.4 http响应客户端HTML文件

//1.导入模块
const http = require('http')
//文件模块
const fs = require('fs')
//路径模块
const path = require('path')



//2.创建服务器
let server =  http.createServer((req,res)=>{
    //需求:  如果请求路径是 / 返回首页html  如果是login返回登录html

    //1.获取客户端请求路径
    let url = req.url

    //2.处理请求
    //一般如果响应的是文件,不需要设置响应头,直接返回二进制数据。浏览器会自动识别数据类型并且加载
    if(url == '/'){
        //响应首页
        fs.readFile(path.join(__dirname,'index.html'),(err,data)=>{
            if(err){
                throw err
            }else{
                console.log(data)
                //3,将读取好的文件数据响应给客户端
                res.end(data)
            }
        })
    }else if(url == '/login'){
        //响应登录页
        fs.readFile(path.join(__dirname,'login.html'),(err,data)=>{
            if(err){
                throw err
            }else{
                //3,将读取好的文件数据响应给客户端
                res.end(data)
            }
        })
    }else{
        res.end('404 not found')
    }
})

//3.开启服务器
server.listen(3000,()=>{
    console.log('服务器开启成功')
})