Node.js入门到企业Web开发中的应用

来源:互联网 发布:怎么加入淘宝全球购 编辑:程序博客网 时间:2024/06/05 04:51

NodeJS核心API

  • Stream
  • 动态 Web framework
  • child_process & cluster
  • 深入
  • through2
  • Express,koa,egg
  • SSR & 同构
  • NodeJS源码

CommonJS(模块规范)

  • 每个文件是一个模块,有自己的作用域
  • 在模块内部module变量代表模块本身
  • module.exports属性代表模块对外接口

require特性

  • moudle被加载的时候执行,加载后缓存
  • 一旦出现某个模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出
  • node_modules并没有把子依赖放在依赖包的原因是为了提高性能

module.exports和exports的区别

exports是module.exports的快捷方式
lt’s like const exports = module.exports
注意exports的指向问题,不能修改。因为exports指向的永远是moudle.exports

这里写图片描述

global代替window对象

  • CommonJS
  • Buffer(二进制数据流),process(进程),console
  • timer 定时器
  • 模块中直接写const是局部变量,写global是全局变量

process

  • argv 包含了启动Node.js进程时的命令行参数。
  • argv0 保存Node.js启动时传入的argv[0]参数值的一份只读副本。
  • execArgv 返回当Node.js进程被启动时,Node.js特定的命令行选项。
  • execPath 脚本路径
  • env属性返回一个包含用户环境信息的对象
  • cwd() 返回 Node.js 进程当前工作的目录。
  • setImmediate() 等待下一个事件队列
    这里写图片描述

调试

  • Inspect( node –inspect-brk)
  • VS-Code
    • 条件调试,右键

path

normalize,join,resolve
basename文件,extname文件所在路径,dirname文件后缀
parse,format
sep路径分隔符,delimiterPath分隔符,win32,posix

const {normalize} = require('path');相当于const normalize = require('path').normalize;console.log(normalize('./usr//local/bin'));   /usr/local/binconsole.log(normalize('./usr//local/../bin')); /usr/bin

这里写图片描述

Buffer

  • Buffer用于处理二进制数据流
  • 实例类似整数数组,大小固定
  • c++代码在v8堆外分配物理内存
  • Buffer.from()
  • Buffer.allocUnsafe()
  • Buffer.alloc()
  • Buffer.byteLenth()
    • 一个中文,三个字节
  • Buffer.isBuffer()
  • Buffer.concat()
  • 实例
  • Buffer.length
  • Buffer.toString()
  • Buffer.fill()
  • Buffer.equals()
  • Buffer.indexOf()
  • Buffer.copy()

解决乱码问题

这里写图片描述

event(事件)

  • removeAllListeners

这里写图片描述

fs

  • readFileSync
  • readFile
  • writeFile
  • state
  • rename
  • unlink 删除
  • readdir
  • makedir
  • watch
  • createReadStream

这里写图片描述

静态资源服务器

.gitignore

  • 匹配模式前 / 代表项目根目录
  • 匹配模式最后加 / 代表是目录
  • 匹配模式前加 ! 代表取反
    • 代表任意个字符
  • ? 匹配任意一个字符
  • ** 匹配多级目录

ESlint

  • off(0),error(2),warn(1)

项目代码构建

supervisor app.js  自动启动,修改文件不重启

range

这里写图片描述

缓存

这里写图片描述

  • Expires,Cache-Control
  • If-Modified-Since / Last-Modified
  • If-None-Match / ETag

cli

原生可以使用process.argv
也可以使用框架代替
npm i yarge –savw
node index.js –port 8080
chmod +x bin/server 添加执行权限

版本号

x(大版本,不保证兼容).y(新增兼容的功能).z(Bugfix)
1.2.9下一版本是1.2.10,嘿嘿
Linux偶数位:稳定版
x.y.* 相当于 ~x.y.0
2.x 相当于 ^2.0.0

上传到npm

代码已经发送到gitnpm loginnpm publish

本地构建

gulp

babel

webpack

这里写图片描述
- entry
- output
- module
- loader (不同loader处理不同类型文件)
- plugins

单元测试&UI测试

  • chai
  • mochajs
  • istanbul 代码覆盖率工具
    • intanbul cover _mocha –reporter test/mocha.js
  • 持续集成
  • eggjs
  • travis-ci
    • 频繁的将代码集成到主干
    • 每次集成都通过自动化的构建来验证
    • 好处
      • 尽早的发现错误
      • 防止分支大幅偏离主干
  • benchmark
  • jsperf

ui测试

  • React ui测试
  • Jest

headless爬虫

反爬虫

  • User-Agent
  • Referer
  • 验证码
  • 单位时间访问次数,访问量
  • 关键信息图片混淆
  • 异步加载,懒加载

爬取百度图片

  • cheerio
    • 缺点:抓页面内容,不过页面可能什么也没有
  • puppeteer
  • .gitkeeper