Node.js - 核心模块(fs、http、path)(近期持续更新)

在这里插入图片描述

前言

Node.js是javaScript的运行时,是运行在Chorme V8引擎上的,运行速度是极快的

非阻塞IO模型

非阻塞IO就是在程序执行时,如果碰到了IO指令,就开始调用底层的IO操作,但是主程序不用等待底
层IO返回结果,直接执行下一步指令,等IO操作完成之后,再通知主进程就可以了。

事件驱动

这两个特性,让node.js在 io 密集的高并发场景下,具有相当明显的优势
高并发
官方API文档

全局模块

随时随地都可以范文,不需要引用

核心模块

不需要单独下载。可以直接使用 require() 引入的模块

path模块

路径相关

normalize // 用于规范化给定的path
join // 将所有给定的path片段连接在一起
reslove  // 解析为绝对路径
isAbsolute // 检查当前path是否为绝对路径

文件相关

basename //返回路径中最后一部分的文件名
extname // 返回路径最后文件名的拓展名
dirname // 返回path路径中的目录名

路径解析

文件操作模块(fs)

Node中JavaScript具有文件操作的能力
fs是file-system的简写,就是文件系统的意思
异步和同步
Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。
同步文件系统会阻塞程序的进行,也就是除非操作完毕,否则不会向下执行代码
异步文件系统不会阻塞程序的进行,而是在操作完成时,通过回调函数返回
实例:
创建 input.txt 文件,内容如下:
菜鸟教程官网地址:www.runoob.com
文件读取实例
创建 file.js 文件, 代码如下:

var fs = require("fs");
//参数,第一个是路径
// 第二个是回调函数
//成功:error为null,data为数据
//失败:error为错误对象,data为null
// 异步读取
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
     //输出(16进制
     //需要进行toString操作
   console.log("异步读取: " + data.toString());
});

// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());

console.log("程序执行完毕。");

以上代码执行结果如下:

 >node file.js 

同步读取:

 菜鸟教程官网地址:www.runoob.com

异步读取:

菜鸟教程官网地址:www.runoob.com

写入文件
会覆盖原有的文本内容,没有则创建

/**
 * 异步写入
 * @param {string} 文件路径,输入文件内容,回调函数
 */
fs.writeFile('./a.txt', '异步写入', function (error) {
    if(error){
        return console.log("异步写入失败");
    }
    console.log('异步写入');
})
/**
 * 同步写入
 * @param {string} 文件路径,输入文件内容
 */
fs.writeFileSync('./a.txt','同步写入')

读取文件
语法
以下为异步模式下读取文件的语法格式:

fs.read(fd, buffer, offset, length, position, callback)

该方法使用了文件描述符来读取文件。
参数
参数使用说明如下:
fd - 通过 fs.open() 方法返回的文件描述符。
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。

关闭文件
语法
以下为异步模式下关闭文件的语法格式:

fs.close(fd, callback)

该方法使用了文件描述符来读取文件。
参数
参数使用说明如下:
fd - 通过 fs.open() 方法返回的文件描述符。
callback - 回调函数,没有参数。
实例
input.txt 文件内容为:
菜鸟教程官网地址:www.runoob.com
接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");
var buf = new Buffer.alloc(1024);

console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("准备读取文件!");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }

      // 仅输出读取的字节
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }

      // 关闭文件
      fs.close(fd, function(err){
         if (err){
            console.log(err);
         } 
         console.log("文件关闭成功");
      });
   });
});

以上代码执行结果如下:

$ node file.js 
准备打开文件!
文件打开成功!
准备读取文件!
菜鸟教程官网地址:www.runoob.com
文件关闭成功

同步文件,异步文件,简单文件写入都不适合大文件的写入,性能较差,容易内存溢出
获取文件目录

fs.readdir('D:',function(err,files){
    if(err){

    }else{
        console.log(files)
    }
})

Http模块

//加载http核心模块
var http=require('http')
// 使用http.createServer方法创建一个web服务器
var server=http.createServer()
//服务器:对数据进行服务
//发送请求
//接受请求
//处理请求
//注册request事件
server.on('request',function (){
    console.log('收到客户的请求了')
})
//绑定端口号
server.listen(3000,function (){
    console.log('服务器启动成功了')
})

request事件函数

//request请求事件处理函数,需要接收两个参数
//request请求对象
//请求对象可以用来获取客户端的一些请求信息,例如请求路径
//reponse响应对象
//响应对象可以用用来给客户发送响应消息
server.on('request',function (request,reponse){
    console.log('收到客户的请求了'+request.url)
     //reponse对象的write方法可以给用户发送响应数据
    //write可以使用多次,但最后一定要使用end来结束响应,否则客户端会一直等待
    reponse.write('hello')
    reponse.write('hello world')
    reponse.end()   //终止该响应
})

Url模块

Node.js实现301、302重定向服务
Node.js重定向详解链接
301 永久重定向 ,浏览器会记住,再次访问会直接跳转
302 临时重定向,会去服务端请求,再跳转

自定义模块

自己封装的模块,可以直接使用 require() 引入

相关资料

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李和贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值