Node.js

106 阅读3分钟

Javascript:ECMAScript、Dom文档对象、BOM浏览器对象

Nodejs:ECMAScript、os操作系统、file文件系统、net网络通讯、database数据库...

一,Node.js是什么?可以做什么?

nodejs.org

官网链接

插件官网

(1)是什么?

  • 基于Chrome V8 runtime引擎运行环境
  • 事件驱动,轻量高效
  • 非阻塞的I/O(input,output,输入输出流,ajax同步,网络请求,数据处理,文件的读写
  • 包管理工具npm,全球最大的开源库生态

(2)做什么?

  1. 基于Express,koa,eggjs框架,可以快速构建Web应用
  2. 基于Electron框架,可以构建跨平台的桌面应用
  3. 基于restify框架,可以快速构建API接口项目
  4. 连接,读写和操作数据库

二,特点

1. 事件驱动 
2. 非阻塞IO模型(异步) 
3. 高性能/轻量和高效

三,什么项目适合选用Node.js?

1. 聊天服务器:同一时刻可能存在大量并发连接,而服务器端本身不存在非常复杂的处理。
2. 电商类服务器:秒杀、抢购、准点开卖等场景。

四,node安装与执行文件

 node -v 
 npm -v 
 执行nodejs文件: node 需要执行文件的路径(系统绝对路径,相对路径)

五,配置镜像

Npm
淘宝镜像:$ npm config set registry https://registry.npm.taobao.org
查看配置的镜像地址:npm config get registry
不想使用淘宝镜像:$ npm config set registry https://registry.npmjs.org

六,cnpm安装

npm install -g cnpm —registry=<https://registry.npm.taobao.org>
cnpm install —global vue-cli

七,node版本管理工具

1 nvm ls 查看所有版本号
2 nvm use 切换版本号
3 node -v  查看使用的版本号
4 nvm install v10.13.0安装指定版本
5 nvm use --delete-prefix 10.13.0 切换到指定版本
注:n交互管理node版本 前端大神TJ写的,都不支持windoes系统
npm install n -g
n --version
n lts 安装最新的lts版本
n latest 安装最新的current版本
n 查看所有可用版本

八,模块化

·内置nodejs模块
    文件操作 同步操作出现错误代码终止try{}catch{}捕捉错误
·第三方nodejs模块
    发送邮箱验证码nodemailer
·自定义nodejs模块
    创建一个模块 一个js文件一个模块
    导出一个模块 module.exports=name
    引用一个模块并且调用 require('./moudle')
    
require('路径')中路径的写法:
    require('a.js'); //node_modules文件夹中,或者node内置模块
    require('./a.js'); //当前路径
    require('../a.js'); //返回上一层
    require('/a.js'); //根目录
    
给node传递参数:
    命令行: 
    1.传递参数 node index.js codewhy age=19 node index.js env=devlopment codewhy
    2.获取参数 console.log(process.argv[2]) output:codewhy 
    3.遍历参数 process.argv.forEach(item => console.log(item)) 
    argv===argument vector 传入的具体参数 
    argc===argument counter 传递参数的个数
    
node的输出:
    console.log(); 控制台输出 
    console.clear(); 清空控制台 
    console.trace(); 打印函数的调用栈

九,常见的全局对象Global objects

global. + tab键 //可以查看所有global下所有的对象

process 提供Node进程中的的相关信息,node index.js开启一个线程 
__dirname 获取当前文件坐在路径,不包括文件名 
__filename 获取当前文件所在路径和文件名称 
console 提供简单的控制台输出 
module 
exports 
require 
定时器函数: 
   setImmediate(()=>{})    立即执行           执行2 
   setInterval(()=>{},1000)每隔一秒重复执行    执行4 
   setTimeout(()=>{},1000) 延时一秒后执行一次   执行3 
   process.nextTick(()=>{}) 下一个(帧/秒)tick队列执行 执行1 
   clearImmediate、clearIntervalclearTimeout 
global 可以获取到所有的全局对象 
console.log(global);

十,commonJS规范

一个js文件就是一个模块,每个模块都有自己的作用域.

引入模块:require('路径') 
输出模块:module.exports = 向外输出的内容;
exports.name = name; 
exports.age = age; 
exports.sayHello = sayHello; 
console.log(exports); 
console.log(module);

真正导出东西的是module.exports。因为commonJS中是没有module.exports这个概念的。为了实现模块导出,Node中使用的是Module的类,每一个模块都是Module的一个实例,也就是module。所以module才是导出的真正实现者。
commonJS是同步加载。
⚠️:每个规范包括的核心功能:1.模块本身可以导出暴露的属性;2.模块又可以导入自己需要的属性;