nodeJs读书笔记

核心概念

Node.js 早期的架构图

  • Chrome V8 是 Google 发布的开源 JavaScript 引擎,采用 C/C++ 编写,在 Google 的 Chrome 浏览器中被使用。Chrome V8 引擎可以独立运行,也可以用来嵌入到 C/C++ 应用程序中执行。
  • Event Loop 事件循环(由 libuv 提供)
  • Thread Pool 线程池(由 libuv 提供)
  • 事件循环和线性池负责所有I/O任务的分发与执行
  • Node.js在接受任务的时候是单线程的,但在执行具体任务的时候是多线程的。
  • NodeJS是一个JS脚本解析器,任何操作系统下安装NodeJS本质上做的事情都是把NodeJS执行程序复制到一个目录,然后保证这个目录在系统PATH环境变量下,以便终端下可以使用node命令。

模块系统

exports

1
2
3
exports.hello = ()=>{
// todo
}

module

通过module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。例如模块导出对象默认是一个普通对象,如果想改成一个函数的话,可以使用以下方式。

1
2
3
4
5
6
7
8
9
10
11
//hello.js 
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;

1
2
// other.js
var hello = require('./hello');

require

1
var hello = require('./hello');

文件系统

  • fs模块中,所有的方法都分为同步和异步两种实现
  • API名称有Sync的,皆为同步方法。例: writeFileSync

官方文档

掘金学习文档

文件

利用文件读写模仿复制,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const fs = require('fs');

function copy(buffer, src) {
fs.writeFile(src, buffer, (err)=>{
if(!err) {
console.log('复制成功');
}
});
}

function main(src, copyToSrc) {
fs.readFile(src, (err, data) => {
if(!err) {
copy(data, copyToSrc);
}
})
}

main('../package.json', 'test.txt');

直接使用fs的复制api,如下:

1
2
3
4
5
6
7
8
9
10
11
function copyFun(src, copyToSrc) {
fs.copyFile(src, copyToSrc, err => {
if(err) {
console.log(err);
} else {
console.log('复制成功');
}
});
}

copyFun('../package.json', 'test.txt');

文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 操作文件夹
const fs = require('fs');

// 查看文件操作权限
function accessFun() {
fs.access('../19-03-04', err=>{
if(err) {
console.log('不可访问');
} else {
console.log('可读可写');
}
})
}

// 读取文件目录下的文件
function readdirFun() {
fs.readdir('../19-03-04', (err, data) => {
if(!err) {
console.log(data);
}
});
}

// 用async将同步方法变成异步
async function readdirSyncFun() {
const data = await fs.readdirSync('../19-03-04');
console.log(data);
}

readdirFun();

进程 process

如何玩转子进程

process是一个全局对象,主要有以下属性

  • stdin 标准输入可读流
  • stdout 标准输入可写流
  • stderr 标准错误输出流
  • argv 终端输入参数数组
  • env 操作系统环境信息
  • pid 应用程序进程id
1
2
3
4
5
6
7
8
9
process.stdin.on('data', (chunk) => {
process.stdout.write('接收的数据:' + chunk);
})

➜ node process.js
123
接收的数据:123
➜ data
接收的数据:data

Copyright © 2017 - 2019 Timbok's Blog All Rights Reserved.

访客数 : | 访问量 :