跳至主要內容

NodeJS概述

白日梦想家yy...大约 6 分钟

NodeJS概述

NodeJS与JavaScript的区别

  • JavaScript是前端语言,NodeJS是后端语言 ZETFM795CiPoId4.jpg

NodeJS基础

  • NodeJS语法是完全基于JavaScript的,下列内容与JS是完全一样的: 数据类型 、运算符、逻辑结构、函数作用域和闭包、对象和原型、对象分类、......

  • 数据类型包括

    • 原始类型:string、number、boolean、null、undefined
    • 引用类型:ES核心对象:global、string、number、boolean、date、math、array、error、function、object、regexp
      • Node.js对象:buffer、readstream、clientrequest....
      • 自定义对象

NodeJS运行

  • 交互模式(REPL)运行
    • 终端执行交互模式
    • 读取用户输入,执行运算,输出执行结果,继续下一次循环
    • 交互模式下,NodeJS自带的模块无需引入
gqJlvAKxc4aepdC.png
gqJlvAKxc4aepdC.png

  • 脚本模式
    • NodeJS下,文件格式的不同不会影响运行,只要代码文件内部的代码符合NodeJS语法
    • 将所有语句编写在独立的脚本文件中,一次性执行
    • 脚本模式下,除了全局对象及其相关成员外,所有其它模块中声明的对象和方法必须使用require()引入

global全局对象

  1. Node.js下全局是global

    • 在终端交互模式下,声明的变量和创建的函数都是global下的,可以通过global.a、global.fn()访问
    • 在脚本模式下,声明的变量和创建的函数都不是global下的,不能通过global.a、global.fn()访问
  2. JS下全局是window

    • 在JS下,声明的变量和创建的函数都是全局window下的,可以通过window.a、window.fn()访问

console控制台对象

  • console.log() --打印日志
  • console.info() --打印消息
  • console.warn() --打印警告
  • console.error() --打印错误
  • console.time() --开始计时
  • console.timeEnd() --结束计时
  • 更多API在node.js官方文档,笔记为常用API

需要计时的代码放入开始计时和结束计时的中间 开始计时和结束计时的字符串要一致,否则报错无法计时

console.time("for")  //开始计时
for (var i = 0;i<=10000;i++){  //需要计时的代码
}
console.timeEnd("for")  //结束计时

process进程对象

  • process.arch --查看当前CPU架构
  • process.platform --查看当前的操作系统
  • process.version --查看当前Node.js版本号
  • process.env --查看本机计算机的所有环境变量
  • process.kill(进程PID编号) --结束指定PID编号的进程
  • process.pid --查看当前进程PID编号
  • 更多API在node.js官方文档,笔记为常用API

Buffer对象

  • 也叫缓冲区:指在内存中临时存储数据的区域,常用于网络传输时的资源
  • 存储的是每个字符对应的十六进制Unicode码,此处num代指存储的数量,如果存储的数据无法达到存储的数量,会自动重复存储已存储的字符
  • 创建Buffer:buffer.alloc(num,"存储的字符")
let buf  =Buffer.alloc(6,"abcdef")  //存储6位缓冲数据
console.log(buf);  //输出
  • 将Buffer转为字符串 使用toSting()和String()方法都可以转换为字符串
  • 更多API在node.js官方文档,笔记为常用API

全局函数(定时器)

一次性定时器

  • 只执行一次的定时器
  • setTimeout(执行的匿名函数体,间隔时间)
  • 使用clearTimeout(结束定时的变量名)
//创建的一次性定时器
let timer = setTimeout( function (){  
    console.log("提示文字")  //执行的代码
},3000) //间隔3000ms后执行代码

//结束定时器
clearTimeout(timer)

周期定时器

  • 每间隔指定时长执行一次代码,实际使用中加天检判断,否则成为死循环,一直执行
  • 语法:setInterval(执行的匿名函数体,每次间隔时间)
  • 使用clearInterval(结束定时的变量名)
//创建的周期定时器
let timer = setInterval( function (){  
    console.log("提示文字")  //重复执行的代码
},3000) //每间隔3000ms后重复执行代码

//结束定时器
clearInterval(timer)

立即执行计时器

  • 立即执行计时器中没有间隔时间设置,属于在事件队列中执行代码
  • 在JS中,代码执行顺序为:主程序>>程序外>>事件队列
  • 语法:setImmediate(回调函数)
//主程序,先执行
console.log(1);

//事件队列,最后执行
setImmediate(()=>{  
    console.log(2);
})

//主程序,先执行
console.log(3);
  • 另一种立即执行计时器:process.nextTick(回调函数)
  • 这种定时器执行时不属于主程序和事件队列,而是执行时放在程序外执行
  • 执行顺序是:主程序>>程序外>>事件队列
//主程序,先执行
console.log(1);

//事件队列,最后执行
setImmediate(()=>{  
    console.log(2);
})

//程序外,次执行
process.nextTick(()=>{  
    console.log(4);
})

//主程序,先执行
console.log(3);

模块系统

  • 是一个独立的功能体,主要分为三类
  • 自定义模块、核心模块、第三方模块
  • 可以理解为一个文件就是一个模块,模块中的代码被构造函数所包含
  • 构造函数的参数有:exports、require、module、__filename、__dirname
(function(exports, require, module, __filename, __dirname){
    代码
})

模块系统构造函数参数说明

1. require()

用于引入另一个模块,字符串形式,同一级必须添加./ 如果需要调用引入模块内的代码,需要定义一个常量接收require()方法 调用其它模块中函数、变量方法:如下调用方法处

2. module.exports(别名exports,等价于前者)

当前模块导出(暴漏)的对象,可以往对象添加导出(暴漏)的内容,以便被其它模块引入时可以调用此模块内的代码 exports是module.exports的别名,俩者是等价关系,保险起见,最好都使用module.exports来导出(暴漏)对象

//主模块中
count b = require("./var2.js");  //定义常量接收require方法,并引入其它模块

//调用方法
console.log(b.a);  //调用被引入的其它模块中的变量  

//其他模块中
var a =1;  //声明的变量

module.exports.a=a;  //导出(暴漏)对象,方便主模块中调用

3. module

当前的模块对象,更多详情后期补充

4. __filename

当前模块的绝对路径和模块名称,更多详情后期补充

5. __dirname

当前模块的绝对路径,更多详情后期补充

模块分类

主要分为自定义模块、核心模块、第三方模块 node_modules通常不需要自己创建,使用npm或yarn包管理器时会自动创建 引入方式、场景按下图分类

NlS7DUoCfFaH3bv.jpg
NlS7DUoCfFaH3bv.jpg

包管理器

  • >>请手动跳转至【1-8软件包管理器/构建工具】> 笔记:软件包管理器 - npm<<
    • mysql包就是通过代码将mysql数据库操作封装起来,JS代码中想操作数据库就借助于mysql包中提供的功能

查询字符串模块

  • 浏览器向web服务器发送请求,传递数据的一种方式,位于URL中问号后面的部分
  • 示例:http://www.codeboy.com/list.html?kw=dell&proce=4999
上次编辑于:
贡献者: mygit