为什么要学Node
- 首先Node.js不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node.js还宣称,运行它的服务器能支持数万个并发连接
- 采用事件驱动、异步编程,为网络服务而设计。其实Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程。而且JavaScript也简单易学,很多前端设计人员可以很快上手做后端设计
- Node.js非阻塞模式的IO处理给Node.js带来在相对低系统资源耗用下的高性能与出众的负载能力,非常适合用作依赖其它IO资源的中间层服务
- Node.js轻量高效,可以认为是数据密集型分布式部署环境下的实时应用系统的完美解决方案。Node非常适合如下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多
Node是什么
-
node.js是基于Chrome的v8引擎javascript构建的JavaScript运行环境
-
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型
- Node.js不是一门语言
- Node.js不是库、不是框架
- Node.js是一个JavaScript运行时环境
- 简单来讲就是Node.js可以解析和执行JavaScript代码
- 以前只有浏览器解析执行javaScript代码
- 也就是说现在的JavaScript可以完全脱离浏览器执行
-
浏览器中的JavaScript
- EcmaScript
- 基本的语法
- if
- var
- object
- BOM
- DOM
- EcmaScript
-
Node.js中的JavaScript
- 没有DOM、BOM
- EcmaScript
- 在Node这个JavaScript执行环境中为JavaScript提供了一些服务器级别的操作API
- 例如文件读写
- 网络服务的构建
- 网络通信
- http 服务器
- 等等等等
-
Node.js能做什么
- web服务器后台
- 命令行工具
- npm (Node)
- git(C语言)
- hexo(Node)
Node.js安装与运行环境搭建
安装
首先登陆
两个网址其中一个即可
按照自己电脑是window还是mac版本下载 如果是window版本则需要下载32位或者64位即可
下载后会出现在这个文件: 双击安装即可
在安装的时候可以直接选择默认文件夹即可,文件不大:直接点击NEXT下一步即可 直至安装完毕
安装完毕后切记一定要打开命令行窗口看看是否安装成功:
- win+r 调出这个
- 输入cmd点击确定
- 出来黑窗口命令行输入
node -v
出现如下结果则成功
环境变量
再输入`node -v` 如果没结果时,先去看看环境变量有没有自动配置上,大多数都会自己配置,如果没有就自己配置一下
运行node程序
-
打开任意你熟悉的开发工具,如sublime、vs code,或者记事本
-
新建文件 hello.js,注意这里的文件后缀名是 .js ,而不是 .html
console.log(1);
-
找到 ce.js 文件的位置,然后按下 shift 键的同时点击鼠标右键,选择“在此处打开powershell 窗口”
-
在命令行中输入如下命令
node ce.js
敲击回车键后,就可以执行 ce.js 中的代码了
nodemon
我们使用node ce.js虽然可以执行,但是费时费力,所以我们要安装一个插件
在命令行输入如下代码
npm install -g nodemon //即可全局安装
在执行的时候就可以使用 nodemon就可以检测到改变 及时执行
nodemon ce.js
以上总结
- 通过上面编码,我们可以总结出以下几点
- node 文件的后缀名都是.js
- 以前的学习中,都是将js文件引入到html中,以运行html文件的方式执行js代码,但node是服务器
- 技术,在node技术中,不存在 dom 和 bom,所以运行方式与以前是不一样的
- 运行node程序的方式是使用 node 命令加上文件名称的方式
- 除了在命令行中运行node程序的方式外,很多开发工具,如vs code内部,也可以运行node程序
global
之前我们学的console 是 window 的全局对象
但是在 node 中,global 才是全局对象
- Node中全局对象下有以下方法,可以在任何地方使用,global可以省略
- console.log() 在控制台中输出
- setTimeout() 设置超时定时器
- clearTimeout() 清除超时时定时器
- setInterval() 设置间歇定时器
- clearInterval() 清除间歇定时器
模块化开发
现有的弊端
- 文件依赖:文件依赖不清楚,需要人为的去分析
- 命名冲突:两个js文件中,可能存在同名的变量或者文件,会出现后面文件覆盖掉前面文件的问题
软件中的模块化开发
Node 中的模块化开发规范
- Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到
- 模块内部可以使用exports对象进行成员导出, 使用require方法导入其他模块
系统模块
什么是系统模块
Node运行环境提供的API. 因为这些API都是以模块化的方式进行开发的, 所以我们又称Node运行环境提
供的API为系统模块
- 所谓模块化,就是将相关API根据类型划分,存放到不同的文件中
- 系统模块,就是 Node 预先已经定义好的一些API的集合
- 除了系统模块,开发者还可以开发第三方模块,其他开发者都可以使用,如我们前面自己定义的
- m.js也是一个第三方模块
文件操作手册: 官网
同步读取文件:
var fs=require('fs')
var text=fs.readFileSync('./ce.txt','utf8')
console.log(text);
异步读取文件:
var fs=require('fs')
fs.readFile('ce.txt','utf8',(err,data)=>{
console.log(err)
console.log(data)
})
写入文件:
var fs = require('fs')
fs.writeFile('./ce.txt', '我是测试句子', err => {
if (err) throw err;
console.log('文件已写入')
})
- 系统模块的引入方式也是使用 require
- 模块名称要使用引号包含起来
- readFile是一个异步方法,所以需要回调函数接收读取结果
- 回调函数中,err 获取读取中的错误信息,如果读取过程中没有出现错误,则结果为null;data 为读取的文件内容
.txt’, ‘我是测试句子’, err => {
if (err) throw err;
console.log(‘文件已写入’)
})
- 系统模块的引入方式也是使用 require
- 模块名称要使用引号包含起来
- readFile是一个异步方法,所以需要回调函数接收读取结果
- 回调函数中,err 获取读取中的错误信息,如果读取过程中没有出现错误,则结果为null;data 为读取的文件内容
- 在写入文件时,回调函数只有一个参数err