Nodejs入门(一)分分快三计划

作者:分分快三计划

二、Nodejs开辟遇到与调解工具

1、环境

  • CommonJS 规范
  • global 对象(类似于js里面的window对象)
  • process 当前实行的进程

2、CommonJS规范

  • 各类文件都以叁个模块,都有协调的功效域
  • 在模块内部module变量代表模块本人
  • module.exports属性代表模块对外接口(将模块的一部分东西输出)
  • require规则
    • / 表示相对路线,. / 表示相对于当下文件的
    • 支撑js、json、node的扩充名
  • require特性
    • module被加载的时候会实践一次,并展开缓存,第三回直接用缓存里面包车型客车结果
    • 当叁个模块被循环加载(a重视b,然后b又重视a),那么只会输出已经举行的一部分(a试行在b信赖a从前a该实行的一对)

3、global全局对象

  • CommonJS
  • Buffer、process、console
  • timer

nodejs 是什么

nodejs is a JavaScript runtime built on Chrome's V8
nodejs 实际不是一门语言,而是贰个周转条件
特点:

  • 事件驱动
  • 非阻塞 I/O

fs

读文件

const fs = require('fs')

fs.readFile('./module2.js','utf8', (err, data) => {
    if (err) throw err
    console.log(data)
})

同步操作

const data = fs.readFileSync('./module1.js', 'utf8')
console.log(data)

写文件

const fs = require('fs')

fs.writeFile('./text', 'this is a test', {
    encoding: 'utf8'
}, err => {
    if(err) throw err
    console.log('done')
})

翻看文件状态

const fs = require('fs')

fs.stat('./fs.js', (err, stats) => {
    if(err) throw err
    console.log(stats.isFile())
    console.log(stats.isDirectory())
    console.log(stats)
})

重命名

const fs = require('fs')

fs.rename('./text', 'text.txt', err => {
    if (err) throw err
})

打字与印刷目录的文书名

const fs = require('fs')

fs.readdir('../', (err, files) => {
    if (err) throw err
    console.log(files)
})

删去文件夹

const fs = require('fs')

fs.rmdir('./text', err => {
    if(err) throw err
})

蹲点文件或目录的调换

一、Nodejs介绍

1、nodejs是ecmascript的runtime

2、nodejs使用了event-driven(事件驱动)non-blocking I/Omodel(无阻塞的io模型)

  • 非阻塞:I/O时函数马上回到,进度不等I/O完结
  • event-driven:Nodejs靠事件开展驱动

3、cpu密集 vs I/O密集

  • cpu密集:压缩、解压、加密、解密
  • I/O密集:文件操作、网络操作、数据库

因为JS操作是I/O密集,所以Nodejs是JS在serves上面的runtime

4、高并发应对之道

  • 充实机器数
  • 日增每台机械的cpu数

5、Nodejs单线程

  • 单线程只针对主进度,I/O操作系统底层十二线程调解(Nodejs自个儿是单线程,但它有一对义务交给操作系统自身去做多线程)
  • 单线程不是单进度

6、Nodejs应用场景

  • Web Server
  • 本地代码营造(编写翻译之类)

require 规则

  • / 表示相对路线,./ 表示相对于近些日子文件的相对路线
  • 支持 js、json、node 拓宽名,不写的话就能挨个尝试。
  • 不写路线则认为是 build-in 内部自带的模块大概各级 node_modules 内的第三方模块。

环境

nodejs 环境

  • nodejs 官网:https://nodejs.org/en/
  • CommonJS: 模块化标准
  • global: 全局对象,nodejs 未有 DOM、BOM,全局是global
  • process: 进程

process

const {argv, argv0, execArgv, execPath} = process
// argv 启动这个process的时候的所有参数
// argv0 保存了argv这个数组的引用
// execArgv 调用node所调用的特殊参数
// execPath argv的第一个参数
argv.forEach(item => {
    console.log(item)
})

const {env} = process
console.log(env)   // 执行环境

console.log(process.cwd())  // 当前命令所执行的路径

setImmediate(() => {
    console.log('setImmediate')
})

setTimeout(() => {
    console.log('setTimeout')
}, 0);

process.nextTick(() => {
    console.log('nextTick')
})

nextTick是将其坐落了当前队列的队尾,而setImmediate是献身了下三个行列的队尾,setTimeout是放在两者之间

CommonJS

  • 各种文件是一个模块,有和好的效率域,举例上边栗子,外面包裹了三个函数,就改成了一部分成效域了。
  • 在模块内部 module 变量代表模块本身。
  • module.exports 属性代表模块对外的接口

多线程

运行一个过程,在一个进度内开发银行两个线程,这样,几个线程也得以一块实施多个任务

nodejs 内置模块

api文档

  • fs 文件系统模块,用来做文件的读写,

nodejs.png

为什么前端偏好nodejs

  • 前端职责范围变大,统百分之十本体验
  • 在管理高并发,I/O密集场景质量优势明显

CommonJS

各样文件是三个模块,有和好的功效域
在模块内部module变量代表模块本人
module.exports属性代表模块对外接口

module.exports 与 exports 的区别

const exports = modules.exports
    //exports 是 module.exports 的快捷方式

exports.test = 100;
    //可以给 exports 添加属性。

exports = {
    test: 150
}   //这是错误的用法,因为改变了 exports 的指向,模块输出找不到。

module.exports = {
    test: 200
}   //这是可以的,因为输出的模块是 module.exports
总结

__dirname,__filename 总是回到文件的相对路线
process.cwd()总是回到试行node命令所在文件夹

其三方模块 node_modules

  • chalk 模块,能够让输出带颜色。

    分分快三计划 1

    image

![](https://upload-images.jianshu.io/upload_images/5051517-c16d8c1917129f29.jpg)

image

events

const EventEmitter = require('events')

class CustomEvent extends EventEmitter {

}
const ce = new CustomEvent()
ce.on('test', () => {
    console.log('this is a test')
})
setInterval(() => {
    ce.emit('test')
}, 500)

const EventEmitter = require('events')

class CustomEvent extends EventEmitter{}

const ce = new CustomEvent()

ce.on('error', err => {
    console.log(err)
})

ce.emit('error', new Error('oops'))

推行二遍

import { setInterval } from 'timers';

const EventEmitter = require('events')

class CustomEvent extends EventEmitter{}

const ce = new CustomEvent()

ce.once('test', () => {
    console.log('test event')
})

setInterval(() => {
    ce.emit('test')
}, 500)

移除

const EventEmitter = require('events')
class CustomEvent extends EventEmitter{}
const ce = new CustomEvent()
function fn1() {
    console.log('fn1')
}

ce.on('test', fn1)
ce.on('test', fn2)

setInterval(() => {
    ce.emit('test')
}, 500)

setTimeout(() => {
    ce.removeListener('test', fn2)
}, 1500);

timer

  • setImmediate:下二个事件队列的队首。
  • setTimeout:定期实施,最快是在多个事件队列之间。
  • process.nextTick:当前事件队列的队尾。

来看一下三个的实行各种

分分快三计划 2

image

分分快三计划 3

image

能够看到,试行各样是 nextTicksetImmediate要早,而setTimeout由设定的时日来决定,要是时间为0,则是在多少个事件队列之间。

normalaize

处理路子

const {normalize} = require('path')
console.log(normalize('/usr//local/bin'))

事件驱动

  • I/O等异步操作甘休后的照看
  • 观望者形式

高并发

单位时间内的访谈量

高并发应对之道

  • 日增机器数
  • 充实每台机械的CPU数——多核

resolve

相对路线分析为相对路线

const {resolve} = require('path')
console.log(resolve('./'))

require 特性

  • module 被加载的时候实施,加载后缓存,也就率先次加载并实施,第三次有缓存就不加载了。
  • 若果现身有些模块被循环加载,就只输出已进行的部分,还未实行的有些不会输出。(太绕了,要制止循环引用)
require 特性
  • module被加载的时候施行,加载后缓存
  • 借使出现某些模块被循环加载,就只输出已经施行的有个别,还未进行的有个别不会输出

非阻塞I/O

  • 闭塞:I/O时进度休眠等待I/O达成后开展下一步。
  • 非阻塞:I/O时函数马上回到,进度不等待I/O完成。

sep delimiter win32 posix

和操作系统相关的局部东西

const {sep, delimiter, win32, posix} = require('path')
console.log('sep:', sep)    // 路径分隔符 /
console.log('win sep', win32.sep) // 
console.log('PATH:', process.env.PATH)  
// PATH: /Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin 
console.log('delimiter:', delimiter) // :
console.log('win delimiter:', delimiter) // :

web 常见现象

  • 静态财富读取
  • 数据库操作
  • 渲染页面
require 规则
  • / 表示相对路线,./代表相对于最近文件的门道
  • 扶植js,json,node扩充名,不写一次尝试
  • 不写路线则认为是build-in模块大概各级node_modules内的第三方模块

进程

  • 进程:是计算机中的程序关于某数码集合上的一遍运营活动,是系统开展能源分配和调整的基本单位
  • 多进度:运维多个经过,八个经过可以一块施行几个职分

Buffer

拍卖二进制数据流 实例类似整数数组,大小固定

console.log(Buffer.alloc(10))
console.log(Buffer.alloc(5, 1))
console.log(Buffer.allocUnsafe(5,1))
console.log(Buffer.from([1,2,3]))
console.log(Buffer.from('test'))

<Buffer 00 00 00 00 00 00 00 00 00 00>
<Buffer 01 01 01 01 01>
<Buffer 18 e3 04 04 01>
<Buffer 01 02 03>
<Buffer 74 65 73 74>

console.log(Buffer.byteLength('test'))  // 字节长度
console.log(Buffer.byteLength('测试'))    
console.log(Buffer.isBuffer({}))     // false
console.log(Buffer.isBuffer(Buffer.from([1, 2, 3])))     // true

const buf1 = Buffer.from('h')
const buf2 = Buffer.from('e')
const buf3 = Buffer.from('l')
const buf4 = Buffer.from('l')
const buf5 = Buffer.from('o')

const buf = Buffer.concat([buf1, buf2, buf3, buf4, buf5])
console.log(buf)    // 连接buffer

const buf = Buffer.from('this is a test')
/* buf.length
buf.toString()
buf.fill()    // 填充
buf.equals()    
buf.indexOf()
buf.copy() */

global 全局对象

  • CommonJS
  • Buffer:管理二进制数据流
  • process:进程
  • console
  • timer

把变量赋给 global 对象作为品质,则具备的文件都能得到该变量。

NodeJS单线程

单线程只是针对主进度,I/O操作系统底层多线程调整. 单线程并不是单进程

叁个板栗

分分快三计划 4

image

nodejs 自动帮大家做了,外面包了叁个函数,完毕模块化。

进程

是Computer中的程序关于某数码集结上的贰回运转活动,是系统实行财富分配和调整的着力单位

CPU密集 VS I/O密集

  • CPU密集: 压缩、解压、加密、解密
  • I/O密集: 文件操作、网络操作、数据库

放置概念

parse format

深入分析路线

const {parse, format} = require('path')
const filePath = '/usr/local/include'
const ret = parse(filePath)
console.log(ret)
console.log(format(ret))    // 将拆分的路径执行回来

输出

{ root: '/',
  dir: '/usr/local',
  base: 'include',
  ext: '',
  name: 'include' }
module.exports与exports的区别
const exports = module.exports // exports就是module.exports的简写

(
    function(exports, require, module, __filename, __dirname) {
        // code
    }
)
exports.test = 100

exports = {
    a: 1,
    b: 2
}

固然写成exports,那么exports的指向就能够被改造,它不再指向module.exports,也就像是何都未曾出口
因此:

module.exports = {
    a: 1,
    b: 2
}

这会儿,module.exports将本着了那么些目的,即出口了那么些目的

模块对外的输出永恒是module.exports,你可以增加它的品质,可是你无法修改它的针对性,要是exports的针对性被退换,那么它将不会对外出口

分分快三计划 5

I/O密集

文件的读取,互联网操作,数据库等操作时,为I/O密集

basename dirname extname

const {basename, dirname, extname} = require('path')
const filePath = '/usr/local/bin/no.txt'
console.log(basename(filePath)) // 文件名
console.log(dirname(filePath)) // 路径
console.log(extname(filePath)) // 扩展名

CPU密集

开展的某些减小,解压,加密,解密等总括都属于CPU密集

join

东拼西凑路线

const {join} = require('path')
console.log(join('/usr', 'local', 'bin/'))

线程

进度内一个周旋独立的,可调解的实践单元,与同属二个进程的线程分享进度的能源

NodeJS工作模型

分分快三计划 6

image.png

此刻,NodeJS能够拍卖非常多客商发来的有个别伸手,而那写央求不会因为调用I/O操作而空闲,也等于非阻塞I/O,CPU能够不停的进行吸取乞请,并扩充I/O操作,而I/O操作则是多线程的,当I/O操作完毕后,CPU再讲数量重回给顾客端.NodeJS消除了CPU上的闲暇和拍卖高并发的本领

global

  • CommonJS
  • Buffer,process,console
  • timer
// mod1
global.test = 100
// mod2
console.log(test)  // 100

基础API

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 nodejs Node.js