node学习笔记02

核心模块和对象

核心模块的意义

  • 如果只是在服务器运行JavaScript代码,意义并不大,因为无法实现任何功能(读写文件,访问网络)。
  • Node的用处在于它本身还提供的一系列功能模块,用于与操作系统互动。
  • 这些核心的功能模块在Node中内置。
  • 内置模块:
    • path: 处理文件路径
    • fs: 操作(CRUD)文件系统 CRUD—增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)
    • child_process: 新建子进程
    • util: 提供一系列实用小工具
    • http: 提供HTTP服务器功能
    • url: 用于解析URL
    • querystring: 解析URL中的查询字符串
    • crypto: 提供加密和解密功能
    • ……

包的概念

什么是包

  • 由于Node是一套轻内核的平台,虽然提供了一系列的内置模块,但是不足以满足开发者的需求,于是乎出现了包(package)的概念。
  • 与核心模块类似,就是将一些预先设计好的功能或者API封装到一个文件夹,提供给开发者使用

包的加载机制

  • id:包名的情况:require(“http”)
    • 现在系统核心(优先级最高)的模块中找(以后不要创建一些和现有的包重名的包)
    • 然后再到当前项目中node_modules目录中找

如何管理那么多的包

  • 由于Node本身并没有太多的功能性API,所以市面上涌现出大量的第三方人员开发出来的Package
  • 包的生态圈一旦繁荣起来,就必须有工具去代替人脑或者文档的方式管理

NPM

NPM概述

Node Package Manager

  • 随着时间的发展,NPM出现了两层概念:
    • 一层含义是Node的开放式模块登记和管理系统,也可以说是一个生态圈,一个社区
    • 另一层含义是Node默认的模块管理器,是一个命令行下的软件,用来安装和管理Node模块

安装NPM

  • NPM不需要单独安装,默认在安装Node的时候,会连带一起安装NPM。

  • 但是,Node附带的NPM可能不是最新版本,最好用下面的命令,更新到最新版本

    npm install npm -g

  • 默认安装到当前系统Node所在目录下。

常用NPM命令

  • npm config
  • npm init
  • npm search
  • npm info
  • npm install
  • npm uninstall
  • npm list
  • npm outdated
  • npm update
  • npm run
  • npm cache

文件系统操作

相关模块

路径操作模块(path)

  • 在文件操作的过程中,都“必须”使用物理路径(绝对路径)
  • path模块提供了一系列一系列与路径相关的API
    • path.join([p1][,p2]…) =>连接多个路径
    • path.basename(p,ext) =>获取文件名
    • path.dirname(p) =>获取文件夹路径
    • path.extname(p) =>获取文件扩展名
    • path.format(obj) 和path.parse(p) 一个是格式化对象为字符串,一个是将字符串解析为对象
    • path.relative(from,to) => 获取从from到to的相对路径。

同步或异步调用

  • fs模块对文件的几乎所有操作都有同步和异步两种形式
  • 例如:readFile() 和readFileSync()
  • 区别:
    • 同步调用会阻塞代码的执行,异步则不会
    • 异步调用会将读取任务下达到任务队列,知道任务执行完成才会回调
    • 异常处理方面,同步必须使用try…catch方式,异步可以通过回调函数的第一个参数(错误优先)

文件读取

  • 异步文件读取

    fs.readFile(file[,option],callback(err,data))

  • 同步文件读取

    fs.readFileSync(file[,option])

  • 文件流的方式读取

    fs.createReadStream(path[,options])

readline模块逐行读取文本

1
2
3
4
5
6
7
8
const readline = require("readline");
const fs = require("fs");
const rl = readline.createInterface({input:fs.createReadStream("sample.txt")});
rl.on("line",(line) => {
console.log("Line from file:",line);
});

文件写入

  • 确保操作没有额外的问题,一定使用绝对路径的方式

  • 异步文件写入

    fs.writeFile(file,data[,option],callback(err))

  • 同步文件写入

    fs.writeFileSync(file,data[,option])

  • 流式文件写入

    fs.createWriteStream(path[,option])

  • 默认写入操作是覆盖源文件

  • 异步追加

    fs.appendFile(file,data[,option],callback(err))

  • 同步追加

    fs.appendFileSync(file,data[,options])

其他文件操作

  • 获取文件信息
    • fs.stat(path,callback(err,stats))
    • fs.statSync(path) =>返回一个fs.stats实例
  • 移动文件
    • fs.rename(oldPath,newPath)
  • 重命名文件或目录
    • fs.rename(oldPath,newPath,callback)
    • fs.renameSync(oldPath,newPath)
  • 删除文件
    • fs.unlink(path,callback(err))
    • fs.unlinkSync(path)

目录操作

  • 创建一个目录
    • fs.mkdir(path[,model],callback)
    • fs.mkdirSync(path[,model])
  • 删除一个空目录
    • fs.rmdir(path,callback)
    • fs.rmdirSync(path)
  • 读取一个目录
    • fs.readdir(path,callback(err,files))
    • fs.readdirSync(path) => 返回files

监视文件

  • 监视文件变化
    • fs.watchFile(filename[,options],listener(curr,prev))
      • options:{persistent,interval}
    • fs.watch(filename[,options][,listener])

本文结束,感谢阅读。

本文作者:melody0z
本文链接:https://melodyvoid/Node/node-learning-notes-02.html
欢迎转载,转载请注明文本链接

坚持原创技术分享,您的支持将鼓励我继续创作!