Nodejs 内置模块
1. fs 文件系统
1.1 引入
const fs = require('fs');
1.2 方法的使用
对文件和文件夹的操作都有同步和异步两种方式 代码里没有可以去官方文档中查看
// 文件的操作
// 1. 读取文件内容 第一个参数是路径 第二个是字符集 第三个是一个回调函数
// 2.data是读取的文件中的所有代码 不论什么格式
fs.readFile('./test.txt', 'utf-8', function (err, data) {
if (err) {
console.log('文件内容读取失败');
} else {
console.log('文件内容读取成功', data);
}
});
// 同步 sync同步 async异步 参数是两个参数文件路径 字符集 如果不写参数集那么读取出来的就是buffer
//同步的话去赋值不会出差错 同步的读取文件采用赋值方式 通过try catch来捕获错误
try {
const data = fs.readFileSync('./test.txt', 'utf-8');
console.log('文件内容读取成功', data);
} catch (error) {
console.log('文件内容读取失败');
}
// 2. 写入文件内容(会覆盖掉文件中的原内容)
// 当我们路径写错的时候例如文件名 会自动创建一个新的文件 回调函数里值接收一个参数就是错误
//只会创建新的文件 不会创建文件夹
fs.writeFile('./test.txt', '这是新写入的内容', function (err) {
console.log('err', err);
});
//同步写入文件 也可以用try catch来管理
fs.writeFileSync('./test.txt', '这是同步新写入的内容');
try {
fs.writeFileSync('./test.txt', '这是同步新写入的内容');
} catch (error) {
console.log('文件内容读取失败',error);
}
// 3. 追加文件内容 也会创建新的文件 但是也不能创建文件夹
fs.appendFile('./test.txt', '\n这是追加的新内容', (err) => {
console.log(err);
})
fs.appendFileSync()
// 4. 复制文件内容 第一个参数是被复制的文件的路径 第二个是复制过去的新文件路径
//如果新文件不存在也就是第二个参数 就会创建一个新文件
fs.copyFile('./test.txt', './newTest.txt', (err) => {
console.log(err);
})
fs.copyFileSync()//同步写法
// 5. 删除文件
fs.unlink('./newTest.txt', err => {
console.log(err);
})
fs.unlinkSync()//同步写法
// 6. 重命名文件(也可以用于文件的移动) 会对原文件做一个重命名 如果第二个参数的路径有文件夹 那么就会把文件移动到文件夹下面
//下面的例子就把bbb移动到了data下面 但是注意一点 前提是必须有data这个文件夹 这些都是对文件的操作不是对文件夹的操作
fs.rename('./bbb.txt', './data/bbb.txt', err => {
console.log(err);
})
fs.renameSync()//同步写法
// 文件夹的操作
// 1. 创建文件夹
//不能连续创建两个文件夹 下面的例子里data必须以前存在,才可以在里面添加一个b文件夹
fs.mkdir('./data/b', (err) => {
console.log(err);
});
fs.mkdirSync('./data/a')
// 2. 删除文件夹(只能删除空文件夹)
fs.rmdir('./data', err => {
console.log(err);
})
fs.rmdirSync('路径')
// 3. 读取文件夹内容 读取的文件是子目录下面的 结果是子目录文件或文件夹名字的一个数组
fs.readdir('./data/b', (err, data) => {
console.log('err', err);
console.log('data', data);
})
// 4. 判断文件(文件夹)是否存在 err就代表这个文件或文件夹不存在
fs.access('./dat', (err) => {
if (err) {
console.log('不存在');
} else {
console.log('存在');
}
})
// 5. 查看状态 判断当前路径是文件还是文件夹
//回调函数里面的参数stats是一个对象
fs.stat('./data', (err, stats) => {
console.log('是不是文件', stats.isFile());//是否为文件
console.log('是不是文件夹', stats.isDirectory());//是否为文件夹
})
//同步方法fs.statsSytnc会返回一个对象 对象上有isFile() isDirectory()
const stats = fs.statSync()
stats.isFile()
stats.isDirectory()
2. path 路径
2.1 引入
const path = require('path');
2.2 方法的使用
// 全局对象 __dirname:用于当前文件所在目录的绝对路径 不是path模块里面的
console.log(__dirname);
const myPath = 'C:\\Users\\nocat\\Desktop\\08\\02. 课堂代码\\03-Nodejs\\a.mp4';
// 1. basename 用于获取给定路径中的最后一部分 就是上面的a.mp4
const result = path.basename(myPath);
// 2. dirname 用于获取给定路径中出去最后一部分的其他部分 就是上面的C:\\Users\\nocat\\Desktop\\08\\02. 课堂代码\\03-Nodejs basename和dirname可以拼接成一个完整的路径
const result = path.dirname(myPath);
//官方文档:http://nodejs.cn/api/path.html#pathparsepath
// 3. extname 用于获取给定路径中文件的后缀名 拓展名
const result = path.extname(myPath);
// 4. parse 用于拆分给定路径
const result = path.parse(myPath);
path.parse('/home/user/dir/file.txt'); //返回一个对象
// 返回:
// { root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }
// 5. join 拼接相对路径
const result = path.join('./a', './b', './c', '..');
// 6. resolve 拼接绝对路径
const result = path.resolve('./a', './b', './c');
console.log(result);
3. http 网络请求
const http = require('http');
const fs = require('fs')
//简单的理解一下
// request:请求对象 包含了请求相关的数据和方法等
// response:响应对象 包含了请求相关的数据和方法等
const app = http.createServer((requset, response) => {
res.write('<h1>Hello</h1>');
res.end();
});
// 端口号:3000,当前电脑中每一个应用程序的唯一标记 (0-65525)
// 范围:0 - 65535,建议设置 3000 以上
app.listen(3000);
//运用fs模块和http模块返回一个页面
//结合fs模块可以选择要返回的界面
const http = require('http');
const fs = require('fs')
const app = http.createServer((req,res) => {
fs.readFile('./nn.html','utf-8',(err,data) => {
try {
res.write(data);
res.end();//这个不可以写在下面我说的位置
} catch (err) {
console.log(err);
}
})
//res.end();不可以写在这里 因为readfile是异步的 导致res.end先执行不对 应该先res.write先执行
});
app.listen(3000);
六个转成布尔值会变成false的 这个是原生js知识点
0 '' undefined null Nan false
必须是空字符串