node.js的基本用法

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值