在node.js中,有的模块使用时,无需通过require()函数来加载该模块,可以直接使用,例如:process 模块
有的模块使用时,必须经过require()函数来加载该模块,才能使用,例如,fs模块:var fs = require('fs');
原因:process模块是全局模块,而fs不是全局模块,全局模块可以直接使用,而非全局模块需要先通过require('')加载该模块
node官网教程中 Globals里面的模块都是可以直接使用的
console和setTimeout都不是ECMAScript有的,是浏览器扩展的
node.js中,稳定性0级表示已经已经废弃的,稳定性1级表示正开发测试的,稳定性2级表示稳定的 该特性已被证明是符合要求的,建议使用稳定性为2级的
1、实现文件的写入操作
// 实现文件写入操作
// 加载文件操作模块:fs模块
var fs = require('fs');
var msg = "Hello World!您好 世界!";
// 调用fs.writeFile()进行文件写入,这是一个异步操作
fs.writeFile('./hello.txt', msg, 'utf8', function (err) {
// 在这个回调函数中只有一个参数,那就是err
// 如果 err === null,表示文件写入成功,没有错误
// 如果err不等于null,就表示文件写入失败了
if (err) {
console.log('文件写入错误,错误是:'+ err);
} else {
console.log('ok');
}
});
node.js和浏览器下的JavaScript既是单线程的又是异步非阻塞的
// 实现文件写入操作
// 加载文件操作模块:fs模块
var fs = require('fs');
var msg = "Hello World!您好 世界!";
console.log('000');
// 调用fs.writeFile()进行文件写入,这是一个异步操作
fs.writeFile('./hello.txt', msg, 'utf8', function (err) {
console.log('111');
if (err) {
console.log('文件写入错误,错误是:'+ err);
} else {
console.log('ok');
}
});
// node.js和浏览器下的JavaScript既是单线程的又是异步非阻塞的
console.log('222');
js代码会单线程的执行下去,遇到fs.writeFile()这个异步操作的时候,加入等待,并继续向下执行
2、实现文件的读取操作
// 加载fs模块
fs = require('fs');
// 调用fs.readFile()进行文件读取,这是一个异步操作
fs.readFile('./hello.txt', function(err, data) {
if(err) throw err;
// data默认是一个Buffer对象,里面保存的就是一个一个的字节,(理解为字节数组)
// 把Buffer对象转换为字符串,调用toString()方法
console.log(data);
console.log(data.toString('utf8'));
// 调用Buffer对象的toString()方法的时候,不传 utf8 参数,默认也是 utf8
console.log(data.toString());
});
3、实现文件的读取操作,直接在fs.readFile()的第二个参数设置编码方式
// 加载fs模块
fs = require('fs');
// 调用fs.readFile()进行文件读取,这是一个异步操作
// 在读取文件的时候,如果传递了编码,那么回调函数中的data默认就会转换为字符串
fs.readFile('./hello.txt','utf8', function(err, data) {
if(err) throw err;
console.log(data);
});
调用fs.readFile()进行文件读取,的第一个参数:'./相对路径' 相对的是执行node命令的路径,而不是相对于执行的这个js文件所在路径来查找。
因此,如果我们在fs.js所在目录下node命令执行这个文件可以正常执行,但在别的地方node命令执行这个文件就会报错。
这就是读取文件的时候的路径问题
4、读取文件中的路径问题
解决在文件读取中'./相对路径'的问题
解决办法:__dirname, __filename
__dirname: 表示当前正在执行的js文件所在的目录
__filename: 表示当前正在执行的js文件的完整路径
// 读取文件中的路径问题
// 解决在文件读取中'./相对路径'的问题
// 解决办法:__dirname, __filename
// __dirname: 表示当前正在执行的js文件所在的目录
// __filename: 表示当前正在执行的js文件的完整路径
// console.log(__dirname);
// console.log(__filename);
fs = require('fs');
// '\\' 转义运算符
var filename = __dirname + '\\' + 'hello.txt';
fs.readFile(filename,'utf8', function(err, data) {
if(err) throw err;
console.log(data);
});
5、读取文件中的路径拼接问题
// 读取文件中的路径拼接问题
var fs = require('fs');
var path = require('path');
在windows系统下是\但在Linux系统下是/
// 如果__dirname末尾已经带斜杠,再手动拼接上一个就会出错
// '\\' 转义运算符
// var filename = __dirname + '\\' + 'hello.txt';
// path.join() 方法用于拼接并生成规范化的路径。
var filename = path.join(__dirname, 'hello.txt');
console.log(filename);
fs.readFile(filename,'utf8', function(err, data) {
if(err) throw err;
console.log(data);
});
6、创建文件夹
// 创建文件夹
const fs = require('fs');
const path = require('path');
var filename = path.join(__dirname, 'file');
fs.mkdir(filename, function (err) {
if(err) {
console.log('创建文件夹失败,失败原因:' + err);
} else {
console.log('文件夹创建成功');
}
});
7、创建多层文件夹
// 创建文件夹
const fs = require('fs');
const path = require('path');
var filename = path.join(__dirname, 'file');
fs.mkdir(filename, function (err) {
if(err) {
console.log('创建文件夹失败,失败原因:' + err);
} else {
console.log('第一层文件夹创建成功');
var filename2 = path.join(filename, 'mkdir-study');
fs.mkdir(filename2, function (err) {
if(err) {
console.log('创建文件夹失败,失败原因:' + err);
} else {
console.log('第二层文件夹创建成功');
}
});
}
});
在使用node模块中的方法的时候,回调函数的第一个参数是error(错误对象),这就是错误优先(error-first)回调
异步操作无法通过try-catch来捕获异常,要通过判断error来判断是否出错
同步操作可以通过try-catch来捕获异常