Node.js 基础 模块 学习

445 阅读5分钟

初识Node.js


1:什么是Node.js

Node.js是一个基于Chrome V8引擎的 JavaScript运行环境

[注意]  Node.js无法调用DOM和BOM等浏览器内置API


2.fs模块

fs模块时Node.js官方提供的,用来操作文件的模块。它提供了一系例的方法和属性来满足用户对文件的操作需求。

例如:

  • fs.readFIle()方法,用来读取指定文件中的内容
  • fs.writeFile()方法,用来向指定的文件中写入内容

用法注意点:

const fs = require('fs'); //先进行导入

2.1:fs.readFile()参数

fs.readFile(path[,option],callback);
  • 参数1: 必须参数,字符串,表示文件的路径
  • 参数2: 可选参数,表示已什么编码格式来读取文件
  • 参数3: 必须参数,文件读取完成之后,通过回调读取结果

2.2:fs.readFile()的例子:

// 1.导入fs 模块
const fs = require('fs');
// 2.调用fs.readFile() 方法读取文件
// 参数1: 读取文件的存放路径
// 参数2: 读取文件时候采用的编码格式,一般默认指定utf8
// 参数3: 回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile('./files/1.txt','utf8',(err,dataStr)=>{
    console.log(err); //如果读取成功值为null
    //如果读取失败,则err的值为错误对象,dataStr 的值为undefined
    console.log(dataStr);
})

2.2.1:判断文件是否读取成功

const fs = require('fs')
fs.readFile('./files/1.txt','utf8',(err,dataStr)=>{
    if(err) { // 如果err为true就返回错误,不是就读取文件成功
        return console.log('读取文件失败!'+err.message)
    }
    console.log('读取文件成功!' + dataStr);
})

2.3:fs.writeFile()参数

fs.writeFile(file,data[,option],callback)
  • 参数1: 必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
  • 参数2: 必选参数,表示要写入的内容
  • 参数3 可选参数,表示以什么格式写入文件内容,默认值时utf8.
  • 参数4: 必须按参数,文件写入完成后的回调函数

2.4:fs.writeFile()的例子:

//导入fs文件系统模块
const fs = require('fs');
​
//2.调用fs.writeFile()方法,写入文件的内容
// 参数1:表示文件的存放路径
// 参数2:表示要写入额度内容
// 参数3: 回调函数
fs.writeFile('./files/2.txt','abcd',(err)=>{
    //如果文件写入成功,则err值为null
    console.log(err);
})

2.4.1:判断文件是否写入成功

//导入fs文件系统模块
const fs = require('fs');
​
//2.调用fs.writeFile()方法,写入文件的内容
// 参数1:表示文件的存放路径
// 参数2:表示要写入额度内容
// 参数3: 回调函数
fs.writeFile('./files/3.txt','ok123',(err)=>{
    //如果文件写入成功,则err值为null
    // console.log(err);
    if (err) {
        return console.log('文件写入失败!' + err.message)
    }
    console.log('文件写入成功!');
})

2.5:fs模块路径动态拼接的问题

在使用fs模块操作文件时,如果提供的操作路径是以./或../开头的相对路径时,很容易出现路径动态拼接错误的问题。

原因:

  • 代码执行时,会以执行node命令时所处的目录,动态拼接处被操作文件的完整路径

解决方法:

  • 在使用fs模块操作文件时,直接提供完整的路径,不要提供./或../开头的相对路径,从而防止路径动态拼接的问题

    //移植性差,不利于维护
    // fs.readFile('/Users/yangtingfeng/n_ode/files/1.txt','utf8',(err,dataStr)=>{
    //     if(err) {
    //         return console.log('读取文件失败!' +err.message);
    //     }
    //     console.log('读取文件成功!' + dataStr);
    // })
    ​
    fs.readFile(__dirname + '/files/1.txt','utf8',(err,dataStr)=>{
        if(err) {
            return console.log('读取文件失败!' +err.message);
        }
        console.log('读取文件成功!' + dataStr);
    })
    console.log(__dirname);///Users/yangtingfeng/n_ode
    

3:path路径模块

path模块时node.js官方提供的来进行处理路径的模块。它提供了一系列方法与属性,用来满足用户对路径的处理需求。

例如:

  • path.join()方法,用来将多个路径片段拼接成为一个完整的路径字符串
  • path.basename()方法,用来从路径字符串中,将文件名解析出来

3.1:path.join()的语法格式

path.join([...paths])

参数解读:

  • ...paths<字符串string>路径片段序列
  • 返回值<字符串string>

3.2:path.join()代码示例

const path = require('path')
const fs = require('fs')
//注意:../会抵消前面的路径(c)
const pathStr = path.join('/a','/b/c','../','./d','e')
console.log(pathStr); ///a/b/d/e
​
fs.readFile(path.join(__dirname,'/files/1.txt'),'utf8',(err,dataStr)=>{
    if(err) {
        return console.log(err.message);
    }
    console.log(dataStr);
})

3.3path.basename()的语法格式

使用path.basename()方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名

path.basename(path[,ext])

参数解读:

  • path <字符串string> 必选参数,表示一个路径的字符串
  • ext <字符串string> 可选参数,表示文件扩展名
  • 返回: <字符串string> 表示路径中的最后一部分

3.3.1:path.basename()的代码示例:

const path = require('path');
​
const fpath = 'a/b/c/index.html';
​
// const fullName = path.basename(fpath)
// console.log(fullName); //输出index.html
​
const nameWithoutExt = path.basename(fpath,'.html');
console.log(nameWithoutExt);//输出index

3.4:path.extname()的语法格式

使用path.extname()方法,可以获取路径中的扩展名部分

path.extname(path);

参数解读:

  • path <字符串string>必选参数,表示一个路径的字符串
  • 返回: <字符串string> 返回得到的扩展名字符串

3.4.1:path.extname()的代码示例:

const path = require('path');
​
const fpath = 'a/b/c/index.html';
​
const fext = path.extname(fpath);
console.log(fext); //输出 .html

3.5:综合案例

3.5.1:步骤1:导入需要的模块并创建正则表达式

//1.导入fs 文件系统模块
const fs = require('fs');
//2.导入path 路径处理模块
const path = require('path')
//3.匹配正则
const regStyle = /<style>[\s\S]*</style>/;
​
const regScript = /<script>[\s\S]*</script>/;
​
//4.读取文件
fs.readFile(path.join(__dirname,'./files/index.html'),'utf8',(err,dataStr)=>{
    if(err) {
        return console.log('文件读取失败'+err.message);
    }
    resolveCSS(dataStr)
    resolveJS(dataStr)
    resolveHTML(dataStr)
})
//css方法
function resolveCSS(htmlStr) {
    const r1 = regStyle.exec(htmlStr);
    //替换操作
    const newCss = r1[0].replace('<style>','').replace('</style>','');
    console.log(newCss);
    //3.4调用 fs.writeFile()方法,将提取的样式,写入到clock目录中index.css的文件里面
    fs.writeFile(path.join(__dirname, './clock/index.css'),newCss,(err)=>{
        if(err) {
            return console.log('写入css样式失败' + err.message);
        }
        console.log('写入样式文件成功');
    })
}
//js方法
function resolveJS(htmlStr){
    const r2 = regScript.exec(htmlStr);
    //替换操作
    const newJs = r2[0].replace('<script>','').replace('</script>','')
    fs.writeFile(path.join(__dirname,'./clock/index.js'),newJs,(err)=>{
        if(err) {
            return console.log('写入JavaScript脚本失败'+err.message);
        }
        console.log('写入js脚本成功');
    })
}
//HTML方法
function resolveHTML(htmlStr){
    //替换操作
    const newHTML = htmlStr.replace(regStyle,'<link rel="stylesheet" href="./index.css"/>').replace(regScript,'<script src="./index.js"></script>')
    fs.writeFile(path.join(__dirname,'./clock/index.html'),newHTML,(err)=>{
        if(err) {
            return console.log('html文件写入失败'+err.message);
        }
        console.log('html文件写入成功'); 
    })
}
​

详情提示:这是base于黑马node入门教程总结学习,如果有需要可以去b站需找node课程,黑马课程链接如下: www.bilibili.com/video/BV1a3…