博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node第一天
阅读量:5788 次
发布时间:2019-06-18

本文共 5757 字,大约阅读时间需要 19 分钟。

commonjs模块化规范

  • 引入:
    • require(模块路径)
  • 暴露:
    • exports
    • modeule.exports
    • 最终暴露的是module(exports指向的值)
  • 所有模块化都有一个特点,每一个模块都包裹了一层函数。
function (exports, require, module, __filename, __dirname) {xxx}      exports 暴露      require 引入      module 暴露      __filename 当前文件的绝对路径      __dirname  当前文件夹的绝对路径复制代码

global

  • nodejs的js:
    • DOM 没有
    • BOM 基本没有,但是有个别: console setTimeout setInterval
    • ES 基本全部包含
    • nodejs有一个全局对象:global:
      • console
      • setInterval
      • setTimeout
      • setImmediate 立即执行函数
      • Buffer
      • process.nextTick 立即执行函数

nodejs事件轮询机制

  • nodejs事件轮询机制:

    1. timers 定时器阶段 计时,执行到点的定时器回调函数
    2. pending callbacks
    3. idle, prepare
    4. poll 轮询阶段 轮询队列,里面放置n个回调函数。 首先检查轮询队列是否为空:
      • 不为空:依次取出,同步执行
        • 如果之前设置过setImmediate函数,就去下一个check阶段
        • 如果没有设置过setImmediate函数,就在当前阶段停留
        • 如果定时器到点了,也会去下一个check阶段
    5. check 检查阶段 执行setImmediate的回调函数
    6. close callbacks 关闭阶段

    事件轮询:反复执行这6个阶段。一般来讲第四阶段停留最长(绝大部分回调函数都是第四阶段执行的)

  • process.nextTick能在任意阶段优先执行

package(包)

  • package.json 包描述文件:
    • name: 包的名称 今后下载包就要输入包名

    • version: 包的版本号 A.B.C

      • A 大版本,发生巨大变化
      • B 中版本,新添加、删除、修改部分功能
      • C 小版本, 修复bug
    • dependencies:生产依赖: 这个包要想运行,需要其他包的帮助 项目运行时需要用依赖:jquery

    • devDependencies:开发依赖 项目构建打包时需要用的依赖:babel

    • scripts: 指令 里面会放置运行项目的指令 "start" --> 开始运行项目的指令 npm start "build" --> 生成项目上线文件的指令 npm run build "test" --> 测试代码指令 npm run test

    • 注意:

      1. 不要有多余的东西。多余的逗号、注释
      2. 包名不能重复,下载jquery包,你的包名就不能叫jquery。不能中文

npm命令

  • nodejs都是通过npm来下载要依赖的包(下载包之前,要先有包描述文件package.json)

    1. npm install/i xxx 等价于 npm i xxx --save/-S node_modules: 放置下载的包 package-lock.json: 会缓存包下载地址。下次下载更快 将包添加到package.json生产依赖中
    2. npm i xxx --save-dev/-D 下载并添加到开发依赖中
    3. npm i xxx -g 全局安装: 只用于运行指令 npm i browserify -g browserify xxx -o yyy
    全局安装包的路径:C:\Users\XiongJian\AppData\Roaming\npm复制代码
    1. npm init 初始化一个包描述文件 package.json npm init -y 创建全部使用默认值 package.json
    2. npm i 下载当前目录中package.json的所有依赖
    3. npm remove xxx 删除包和依赖
  • 将下载地址关联到淘宝
npm config set registry http://registry.npm.taobao.org/复制代码
  • yarn 是facebook公司研发开源的包管理器
    • npm i yarn -g 全局安装,作为指令使用
    1. 下载并添加到生产依赖  yarn add xxx2. 下载并添加到开发依赖 yarn add xxx --dev3. 下载全局包 yarn global add xxx  需要将下载包配置成环境变量才能使用,一般不用yarn下载全局包4. 下载依赖所有包 yarn复制代码
  • 将下载地址关联到淘宝
yarn config set registry http://registry.npm.taobao.org/复制代码

Buffer

  • 创建Buffer:
    1. new Buffer(10) 方法被废弃了,不要在使用
    2. Buffer.alloc() 找了内存清空里面所有数据,性能稍差
    3. Buffer.allocUnsafe() 不安全的,可能会包含敏感数据
    4. Buffer.from() buf.toString()

nodejs核心模块(path)

// nodejs的核心模块const path = require('path');// 专门用来处理路径问题const src = __dirname + '/06.Buffer.js';// console.log(src);// 将传入的n个路径,拼接成一个绝对路径返回console.log(path.resolve('../', '06.Buffer.js')); // C:\Users\XiongJian\Desktop\0225\class0225\05.nodejs\06.Buffer.jsconsole.log(path.resolve(__dirname, '../04.性能优化', '01_图片性能优化/index.html'));// 将传入的n个路径,拼接成一个路径返回console.log(path.join('../', '06.Buffer.js'));复制代码

nodejs核心模块(events)

// events是nodejs核心模块const Emitter = require('events');// 用来实现自定义事件class MyEmitter extends Emitter {}// 创建事件实例对象const myEmitter = new MyEmitter();// 绑定自定义事件myEmitter.on('myEvents123', function (...args) {  console.log(args);  console.log('自定义事件触发了111~');});myEmitter.on('myEvents456', function (...args) {  console.log(args);  console.log('自定义事件触发了222~');});// 触发自定义事件myEmitter.emit('myEvents123', 123, 456, 789);复制代码

nodejs核心模块(fs文件系统)

  1. 同步写入文件
    • 同步写入文件
    1. fs.openSync(path, flags[, mode]); path 文件路径 flags 要执行的操作 'w' write 'r' read mode 设置文件的权限。可选值(可传可不传,一定有默认值)
      • 0o666 可读可写
      • 0o111 文件可执行
      • 0o222 文件可写入
      • 0o444 文件可读取
    fs.writeSync(fd, string[, position[, encoding]])
    • fd 文件描述符
    • string 要写入的内容
    • position 从哪个位置开始写入 默认值0
    • encoding 编码方式 utf-8
const fs = require('fs');// 1. 打开文件const fd = fs.openSync('./3.txt', 'w', 0o666);console.log(fd); // 文件描述符,代表当前读取的文件// 2. 写入文件   中文占三个字节,英文占一个字节const result = fs.writeSync(fd, '下雨,真烦', 10);console.log(result);// 3. 关闭文件fs.closeSync(fd);复制代码
  1. 异步写入文件
// 引入fs模块const fs = require('fs');// 打开文件fs.open('./4.txt', 'w', function (err, fd) {  /*    err 代表错误,如果方法出错了,err就是一个对象。如果方法没有出错,就是null    今后会发现nodejs特点,所有回调函数中第一个参数默认是err。错误优先机制   */   //if循环写法  if (!err) {    // 写入文件    fs.write(fd, '今天天气真晴朗', function (err) {      if (!err) {        console.log('文件写入成功~');      } else {        console.log('文件写入失败', err);      }      // 不管成功还是失败都要关闭文件      fs.close(fd, function (err) {        if (!err) {          console.log('文件关闭成功~');        } else {          console.log('文件关闭失败', err);        }      })    })  } else {    console.log('文件打开失败', err);  }});复制代码
  1. 简单写入文件
const fs = require('fs');fs.writeFile('5.txt', 'hello fs', {flags: 'w', mode: 0o666, encoding: 'utf-8'}, function (err) {  if (!err) {    console.log('文件写入成功~');  } else {    console.log(err);  }})复制代码
  1. 流式写入文件
/* 流式写入文件:适用大文件 */const fs = require('fs');// 创建一个可写流const ws = fs.createWriteStream('./6.txt');// on 绑定持续事件// once 绑定一次性事件ws.once('open', function () {  console.log('可写流打开了~');})ws.once('close', function () {  console.log('可写流关闭了~');})// 往可写流中写入数据ws.write('锄禾日当午');ws.write('汗滴禾下土');ws.write('谁知盘中餐');ws.write('粒粒皆辛苦');ws.write('粒粒皆辛苦');ws.write('粒粒皆辛苦');ws.write('粒粒皆辛苦');ws.write('粒粒皆辛苦');ws.write('粒粒皆辛苦');ws.write('粒粒皆辛苦');// 关闭可写流// ws.close(); ws.end();复制代码
  1. 简单读取文件
const fs = require('fs');fs.readFile('./6.txt', function (err, data) {  if (!err) {    // 读取文件的数据。 默认是二进制数据。    console.log(data.toString());  } else {    console.log(err);  }});复制代码
  1. 流式读取文件
const fs = require('fs');// 创建可读流const rs = fs.createReadStream('C:\\Users\\XiongJian\\Desktop\\异步写入文件.avi');// 创建可写流const ws = fs.createWriteStream('./a.avi');rs.once('open', function () {  console.log('可读流打开了~');})rs.once('close', function () {  console.log('可读流关闭了~');  // 读取完数据,就说明写入完成。就关闭可写流  ws.end();})// 绑定data事件,读取数据rs.on('data', function (data) {  // console.log(data);  // console.log(data.length); // 65536 byte = 64 kb  // 将读取的数据写入新的文件  ws.write(data);});复制代码
  1. pipe
const fs = require('fs');// 创建可读流const rs = fs.createReadStream('C:\\Users\\XiongJian\\Desktop\\异步写入文件.avi');// 创建可写流const ws = fs.createWriteStream('./a.avi');rs.pipe(ws);复制代码

转载于:https://juejin.im/post/5cf12a736fb9a07ea712f7c5

你可能感兴趣的文章
详解区块链中EOS的作用。
查看>>
我的友情链接
查看>>
mysql-error 1236
查看>>
sshd_config设置参数笔记
查看>>
循序渐进Docker(一)docker简介、安装及docker image管理
查看>>
jsp页面修改后浏览器中不生效
查看>>
大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(四)高效的后台权限判断处理...
查看>>
信号量实现进程同步
查看>>
Spring4-自动装配Beans-通过构造函数参数的数据类型按属性自动装配Bean
查看>>
win10.64位wnmp-nginx1.14.0 + PHP 5. 6.36 + MySQL 5.5.59 环境配置搭建 结合Thinkphp3.2.3
查看>>
如何查看python selenium的api
查看>>
Python_Mix*random模块,time模块,sys模块,os模块
查看>>
iframe刷新问题
查看>>
数据解码互联网行业职位
查看>>
我所见的讲的最容易理解,逻辑最强的五层网络模型,来自大神阮一峰
查看>>
vue-cli项目打包需要修改的路径问题
查看>>
js实现复选框的操作-------Day41
查看>>
数据结构化与保存
查看>>
[SpringBoot] - 配置文件的多种形式及优先级
查看>>
chrome浏览器开发者工具之同步修改至本地
查看>>