美文网首页
node.js学习

node.js学习

作者: blossom_绽放 | 来源:发表于2017-12-21 19:07 被阅读11次

对于node.js的学习,感谢菜鸟教程慕课网提供的优秀资料
随着学习的深入,此文章持续更新...


CommonJS

  • 支持js json node扩展名,不写依次尝试
  • 不写路径则认为是build-in模块或各级node_modules内的第三方模块
  • module被加载的时候执行,加载后缓存
  • 一旦出现某个模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出
  • const exports = module.exports

global

node里面没有window全局变量,取代的是global全局变量,例如:

global.a = 200
// 暴露到全局中
console.log(a)  // 200

process

  • 挂载在全局global下的方法,可以读取node命令参数

输出到控制台

process.stdout

argv = [node命令, main.js路径, --test, a=1, b=2]

const argv = process
node main.js --test a=1 b=2

当前进程执行路径(执行node脚本的路径)

console.log(process.cwd())

插入当前事件队列的最后一个 发生顺序 nextTick > setTimeout > `setImmediate

process.nextTick(() => {})

buffer

  • Buffer类似于数组,挂载在全局global下的方法,操作二进制数据流

创建一个长度10且不可改变长度的Buffer,默认用0填充

const buf = Buffer.alloc(10)
buf[2] = 4
Buffer.alloc(5, 1)  // 用1填充

定义一个长度为10 的Buffer,内容随机.因为没有清空值,所以创建速度更快

Buffer.allocUnsafe(10)

创建指定内容的Buffer,默认使用utf-8 编码

Buffer.from([1, 2, 3])
Buffer.from('test')

Buffer长度

Buffer.byteLength('test')       // 4
Buffer.byteLength('测试')       // 6

判断Buffer类型

Buffer.isBuffer({})  // false
Buffer.isBuffer(Buffer.from([1,2,3]))  // true

拼接Buffer类型

const buf = Buffer.concat([Buffer.from('hello'), Buffer.from(' world')])
  • Buffer类型的一些实例方法:

转换字符串类型,默认utf-8编码

console.log(buf.toString('base64'))

Buffer类型初始定义长度,与内容无关

console.log(buf.length)  // 10

填充Buffer类型内容,第一个参数为填充内容,第二三个参数为填充位置

console.log(buf.fill(10, 2, 6))  // 10

判断Buffer类型的内容是否一样

console.log(Buffer.from('test').equals(Buffer.from('test')) // true

判断Buffer类型包含的内容位置,类似于数组的方法

console.log(Buffer.from('test').indexOf('es') // 1
console.log(Buffer.from('test').indexOf('es!') //  -1

拷贝Buffer类型,参数buf2开始拷贝位置,buf拷贝区间
汉字长度为3,有时候会导致copy乱码,可以用内置包string_decode解决

const buf = Buffer.from([1, 2, 3, 4, 5, 6])
const buf2 = Buffer.alloc(3)
buf.copy(buf2, 0, 2, 3)

const StringDecoder = require('string_decode').StringDecoder
const decoder = new StringDecoder('utf8')
decoder.write(buf2)

常用api

path

合并出文件路径/usr/local/bin/

const path = require('path')
path.join('/usr', 'local', 'bin/') 

解析出绝对路径

path.resolve('./')

文件名 文件夹名 扩展名

console.log(path.basename)
console.log(path.dirname)
console.log(path.extname)

(总是)解析出文件绝对路径 文件夹绝对路径

console.log(__dirname)
console.log(__filename)

./有两种情况:

  1. 当在require里面使用时,等同于__dirname(总是文件绝对路径)
  2. 当在其他地方使用时,等同于process.cwd()(相对于进程绝对路径)

events

const EventEmitter = require('events')
class CustomEvent extends EventEmitter {}
const ce = new CustomEvent()

on 绑定事件与触发函数,一个事件可以绑定多个函数
emit 触发事件,填入参数
removeListener移除单个事件函数
removeAllListener移除所有事件函数

var fn1 = function() {
    console.log('remove')
}
ce.on('error', (err, time) => {
    console.log(err)
    console.log(time)
})
ce.on('error', fn1)
ce.emit('error', new Error('oops!'), Date.now())
ce.removeListener('error', fn1)

once 绑定的事件只会触发一次

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

fs 文件操作

读取文件,分同步与异步方法,可设置读取格式参数utf8 默认为Buffer类型

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

// 同步
const data = fs.readFileSync('./main.js', 'utf8')
console.log(data)

创建写入文件,默认类型utf8 也可以传入Buffer类型

fs.writeFile('./text', 'hello world', 'uft8', err => { })

const content = Buffer.from('this is a test!')
fs.writeFile('./text', content, err => {})

// 添加文件内容
fs.appendFile('file', '你好 python', (err) => {})

读取文件状态 监视文件状态

fs.stat('./main.js', (err, stats) => {
    if (err) {
        console.log('文件不存在')
        return
    }
    console.log(stats.isFile())
    console.log(stats)
})

fs.watch('./', {
    recursive: true     // 递归监视
}, (eventType, filename) => {   //事件类型   文件名
    console.log(eventType, filename)
})

文件流相关 读与写

const rs = fs.createReadStream('./main.js')
// 打印到控制台,pipe可以链式使用
rs.pipe(process.stdout).pipe(...)

const ws = fs.createWriteStream('./text.txt')
const tid = setInterval(() => {
    const num = parseInt(Math.random() * 10)
    console.log(num)
    if (num < 8) {
        ws.write(num + '')
    } else {
        clearInterval(tid)
        // 结束写入流
        ws.end()
    }
}, 200)
// 结束时触发 finish 事件
ws.on('finish', () => {
    console.log('done!')
})

压缩文件

const {createGzip, createDeflate} = require('zlib')
const inp = fs.createReadStream('input.txt');
const out = fs.createWriteStream('input.txt.gz');
inp.pipe(createGzip()).pipe(out);

改名 删除

fs.rename('./main.js', 'index.js', err => {})

fs.unlink('./main.js',  err => {})

读取文件列表 创建文件夹 删除文件夹

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

fs.mkdir('test', err => {})

fs.rmdir('test', err => {})

异步操作

目前解决异步的方法promiseasync await

// promise化工具
const promisify = require('util').promisify

const read = promisify(fs.readFile)
read('./main.js').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
// async await
const test = async function() {
    try {
        const content = await read('./main.js')
        console.log(content.toString())
    } catch (err) {
        console.log(err)
    }
}

相关文章

  • 12_Node.js Web 开发

    下面开始用 Node.js 进行 Web 开发。 我是通过《Node.js开发指南》这本书来学习 Node.js ...

  • 2016,9,13

    ##node.js的学习 #node.js的fs模块 var fs = require('fs'); functi...

  • (三)NodeJs快速入门

    本学习笔记是根据《Node.js开发指南》一书进行学习。前面的几篇是根据《深入浅出Node.js》学习,但是学习到...

  • 【灵魂拷问】你为什么要来学习Node.js呢?

    【灵魂拷问】你为什么要来学习Node.js呢? 学习node.js适合的人群: 需要必备一些HTML,CSS,Ja...

  • 如何优雅地学 Node.js

    作者:Draveness 学习 Node.js 的路线图我是在知乎找到的我目前学习 Node.js 的方式就是按照...

  • 如何优雅地学 Node.js

    作者:Draveness 学习 Node.js 的路线图我是在知乎找到的我目前学习 Node.js 的方式就是按照...

  • Node.js学习express框架

    Node.js框架学习 express.js express.js是什么 Express基于Node.js平台,快...

  • node.js web编程总结--重点语法

    目的 学习node.js重点语法,包括如下,目的:跳过基本的语法学习,进入node.js搭建web服务的重点知识:...

  • 【进阶系列】Node.js专题

    1 环境搭建 1.1 WebStorm集成Node.js Node.js入门学习笔记-IDE选择/配置之WebSt...

  • node.js OSX安装~

    根据node.js教程学习node.js遇到的问题及笔记O(∩_∩)O~ 官方网址 *** nvm:https:/...

网友评论

      本文标题:node.js学习

      本文链接:https://www.haomeiwen.com/subject/pbeywxtx.html