1、Node环境和浏览器环境区别
NodeJS环境,和浏览器环境一样,都是一个JS的运行环境, 都可以执行JS代码
A、内置全局对象不同
浏览器环境中提供了window全局对象,NodeJS环境中的全局对象不叫window, 叫 global
B、全局this指向不同
浏览器环境中全局 this默认指向 window,NodeJS环境中全局 this,默认指向空对象 { }
C、API不同
浏览器环境中,提供了操作节点的DOM相关API,和操作浏览器的BOM相关API;NodeJS环境中,没有HTML节点也没有浏览器, 所以NodeJS环境中没有DOM/BOM
2、全局对象属性
// __dirname 当前文件所在文件夹的绝对路径
// __filename 当前文件的绝对路径
// setInterval / clearInterval 设置 / 清理 定时器(间隔执行)
// setTimeout / clearTimeout 设置 / 清理 延时器(延时执行)
// console 打印函数
// process 进程对象
// process.pid -> 进程id
// process.version -> Node.js版本
// process.platform -> 操作系统
// process.cwd() -> 当前工作目录
// process.exit() -> 退出进程
// process.env -> 环境变量
3、模块化(CommonJs)
社区标准,node环境,CMJ规范,静态导入
// 1.js
function a() {
console.log('a');
}
module.exports = { a }
// 2.js
function b(){
console.log('b');
}
module.exports = { b }
// index.js 通过require引入,相当于执行一遍1.js和2.js
const { a } = require('./1')
const { b } = require('./2')
4、基本内置模块
const os = require('os') // 操作系统功能模块
os.arch() // cpu架构名
os.hostname() // 计算机主机名
const path = require('path') // 路径功能模块
path.join() // 将多路径拼接成一个完整的路径字符串
path.basename() // 从路径字符串中,将文件名解析出来
path.extname() // 获取文件后缀
path.dirname() // 获取文件名(除开后缀部分)
// 文件模块
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname, './1.txt') // 获取文件的绝对路径
fs.readFile(filename, 'utf-8', (err, result) => { // 通过readFile拿到的结果是一个16进制的数
console.log('result', result); // 将buffer转成字符串buffer.toString('utf-8')
});
// 写入文件
async function test() {
// 字符串参数写入 如果写入时文件不存在,则会新建文件
await fs.promises.writeFile(filename, 'abcd', {
flag: 'a' // append 追加 不给默认就是覆盖内容
})
// buffer参数写入
const buffer = Buffer.from('cccccccccc', 'utf-8')
await fs.promises.writeFile(filename, buffer, {
flag: 'a'
})
}
test()
// 创建目录
fs.mkdir("testDir",0777, function () {
if (!err) {
console.log("创建目录成功");
} else {
console.log("创建目录失败");
}
}
5、流
node.js一般用到的流的分三种,可读流(Readable)、可写流(Writable)、双工流(Duplex)
可读流:从源读取数据,可写流:向目标写入数据,双工流:既可读又可写;
A、文件流
// 可读流
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname, './谈判话术 - 副本.docx') // 获取文件的绝对路径
const rs = fs.createReadStream(filename, {
// encoding: 'utf-8',
highWaterMark: 1, // 按照编码格式单位获取流
// utf-8 -> 1代表一个字符 / null -> 1代表一个字节
autoClose: true // 读完后自动关闭 默认为true
})
// on监听data事件,才会开始读取文件流
rs.on('data', (chunk) => { // chunk每个单位数据
console.log('chunk', chunk);
})
rs.on('open', () => {
})
rs.on('end', () => {
})
// 可写流
const rs = fs.createWriteStream(filename, {
encoding: 'utf-8',
autoClose: true, // 默认自动关闭
highWaterMark: 3, // 按照编码格式单位设置每次写入大小
})
const flag = rs.write('ab') // 按照设置单位容量写入数据 如果通道满了则返回false 未满则返回true 如果磁盘满了也会返回false
console.log('flag', flag);
const flag2 = rs.write('abcd') // 虽然满了,但是数据仍然会在内存中排队写进去
console.log('flag2', flag2);

被折叠的 条评论
为什么被折叠?



