Node.js
本文最后更新于:2 年前
Node.js
Node 介绍
1.命令行窗口(小黑屏)、CMD 窗口、终端、shell
开始菜单 –> 运行 –> CMD –> 回车
常用的指令:
1 |
|
目录
. 表示当前目录
.. 表示上一级目录
环境变量(windows 系统中变量)
path
1 |
|
当我们在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开
如果没有找到则会依次到环境变量 path 的路径中寻找,直到找到为止如果没找到则报错
所以我们可以将一些经常需要访问的程序和文件的路径添加到 path 中,这样我们就可以在任意位置来访问这些文件和程序了
I/O (Input/Output)
I/O 操作指的是对磁盘的读写操作
Node
Node 是对 ES 标准一个实现,Node 也是一个 JS 引擎,通过 Node 可以使 js 代码在服务器端执行
Node 仅仅对 ES 标准进行了实现,所以在 Node 中不包含 DOM 和 BOM
Node 中可以使用所有的内建对象
String Number Boolean Math Date RegExp Function Object Array
而 BOM 和 DOM 都不能使用,但是可以使用 console 也可以使用定时器(setTimeout() setInterval())
Node 可以在后台来编写服务器
Node 编写服务器都是单线程的服务器
进程
进程就是一个一个的工作计划(工厂中的车间)
线程
线程是计算机最小的运算单位(工厂中的工人)线程是干活的
传统的服务器都是多线程的
每进来一个请求,就创建一个线程去处理请求
Node 的服务器单线程的
Node 处理请求时是单线程,但是在后台拥有一个 I/O 线程池
Node 的用途
- Web 服务 API,比如 REST
- 实时多人游戏
- 后端的 Web 服务,例如跨域、服务噐端的请求
- 基于 Web 的应用
- 多客户端的通信,如即时通信
为什么要学习 Node.js
企业需求
具有服务端开发经验更改
front-end
back-end
全栈开发工程师
基本的网站开发能力
- 服务端
- 前端
- 运维部署
多人社区
Node.js 是什么
Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
- Node.js 不是一门语言
- Node.js 是 JavaScript 运行时的环境
- Node.js 既不是语言,也不是框架
- 简单点来讲就是 Node.js 可以解析和执行
- Javascript 代码以前只有浏览器可以可以解析执行 Javascript 代码
- 也就是说现在的 Javascript 可以完全脱离浏览器来运行,一切都归功于: Node.js
浏览器中的 JavaScript
- ECMAScript
- 基本语法
- if
- var
- function
- Object
- Array
- BOM
- DOM
- ECMAScript
Node.js 中的 JavaScript
- 没有 BOM,DOM
- ECMAScript
- 在 Node 中这个 JavaScript 执行环境为 JavaScript 提供了一些服务器级别的 API
- 例如文件的读写
- 网络服务的构建
- 网络通信
- http 服务器
构建与 Chrome 的 V8 引擎之上
- 代码只是具有特定格式的字符串
- 引擎可以认识它,帮你解析和执行
- Google Chrome 的 V8 引擎是目前公认的解析执行 JavaScript 代码最快的
- Node.js 的作者把 Google Chrome 中的 V8 引擎移植出来,开发了一个独立的 JavaScript 运行时环境
Node.js uses an envent-driven,non-blocking I/O mode that makes it lightweight and efficent.
- envent-driven 事件驱动
- non-blocking I/O mode 非阻塞 I/O 模型(异步)
- ightweight and efficent. 轻量和高效
Node.js package ecosystem,npm,is the larget scosystem of open sourcr libraries in the world
- npm 是世界上最大的开源生态系统
- 绝大多数 JavaScript 相关的包都存放在 npm 上,这样做的目的是为了让开发人员更方便的去下载使用
- 例如:npm install jquery
Node 能做什么
web 服务器后台
命令行工具
- npm(node)
- git(c 语言)
- hexo(node)
- 游戏服务器
- 接口服务器
- …
对于前端工程师来讲,接触 node 最多的是它的命令行工具
- 自己写的很少,主要是用别人第三方的
- webpack
- gulp
- npm
参考书籍
Node 入门书籍:http://www.nodebeginner.org/index-zh-cn.html
官方 API 文档(中文):http://nodejs.cn/api/
开始
安装 Node 环境
查看 Node 环境的版本号
安装:
- 傻瓜式安装,一路
next
- 安装过再次安装会升级
- 傻瓜式安装,一路
确认 Node 环境是否安装成功
- 查看 node 的版本号:
node --version
- 或者
node -v
- 查看 node 的版本号:
配置环境变量
解析执行 JavaScript
- 创建编写 JavaScript 脚本文件
- 打开终端,定位脚本文件的所属目录
- 输入
node 文件名
执行对应的文件
注意:文件名不要用node.js
来命名,也就是说除了node
这个名字随便起,最好不要使用中文。
文件的读写
文件读取:
1 |
|
1.使用 fs 核心模块
1 |
|
浏览器中的 JavaScript 是没有文件操作能力的//但是 Node 中的 JavaScript 具有文件操作能力
fs 是 file-system 的简写,就是文件系统的意思
在 Node 中如果想要进行文件的操作就必须引用 fs 这个核心模块
在 fs 这个和兴模块中,就提供了人所有文件操作相关的 API
例如 fs.readFile 就是用来读取文件的
- 成功
- data 数据
- error null
- 失败
- data undefined 没有数据
- error 错误对象
2.读取文件readFile
1 |
|
文件写入:
1 |
|
1.使用 fs 核心模块
1 |
|
2.将数据写入文件
1 |
|
error
- 成功:
- 文件写入成功
- error 是 nu11
- 失败:
- 文件写失败
- error 就是错误对象
http
http
1.创建 Server 2.监听 request 请求事件,设置请求处理函数 3.绑定端口号,启动服务器
服务器:
1 |
|
你可以使用 Node 非常轻松的构建一个 web 服务器
在 Node 中专门提供了一个核心模块 http
http 这个模块的职贡就是帮你创建编写服务器的
1.加载 http 核心模块
1 |
|
2.使用 http.createServer()创建一个 web 服务器
返回一个 Server 实例
1 |
|
3.服务器要做的事儿
1 |
|
提供服务:对数据服务
- 发请求
- 接收请求
- 处理请求
- 反馈(发送响应)
- 注册 request 请求事件
- 当客户端请求过来,就会自动触发服务器的 request 请求事件,然后执行第二个参数:回调处理函数
4.绑定端口号,启动服务
1 |
|
在浏览器中输入地址回车,控制台就会有反应,说明启动成功了一个最简单的 http 服务
ctrl+c 关闭服务
http-res
request 请求事件处理函数,需要接收两个参数
- Request 请求对象
- 请求对象可以用来获取客户端的一些请求信息,例如请求路径
- Response 响应对象
- 响应对象可以用来给客户端发送响应消息
1 |
|
http-url-res
根据不同的请求路径发送不同的响应结果 1.获取请求路径
res.url 获取到的是端口号之后的那一部分路径
也就是说所有的 url 都是以 / 开头的 2.判断路径处理响应
响应内容只能是二进制数据或者字符串
1 |
|
Node 中的模块系统
使用 Node 编写应用程序主要就是在使用:
ECMAScript 语言
- 和浏览器一样,在 Node 中没有 Bom 和 Dom
核心模块
- 文件操作的 fs
- http 服务操作的 http
- url 路径操作模块
- path 路径处理模块
- os 操作系统信息
第三方模块
- art-template
- 必须通过 npm 来下载才可以使用
自己写的模块
- 自己创建的文件
相对路径中的 ./ 不能省略,后缀名可以省略
什么是模块化
概念:将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并组合在一起。
模块的内部数据、实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信。
最早的时候,我们会把所有的代码都写在一个 js 文件里,那么,耦合性会很高(关联性强),不利于维护;而且会造成全局污染,很容易命名冲突。
模块化的好处
- 避免命名冲突,减少命名空间污染
- 降低耦合性;更好地分离、按需加载
- 高复用性:代码方便重用,别人开发的模块直接拿过来就可以使用,不需要重复开发类似的功能。
- 高可维护性:软件的声明周期中最长的阶段其实并不是开发阶段,而是维护阶段,需求变更比较频繁。使用模块化的开发,方式更容易维护。
- 部署方便
文件作用域
(模块是独立的,在不同的文件使用必须要重新引用)
【在 node 中没有全局作用域,它是文件模块作用域,外部访问不到内部,内部也访问不到外部】
通信规则
- 加载 require
- 加载文件模块并执行里面的代码
- 拿到被加载文件模块导出的接口对象
- 导出 exports
- 每个文件模块中都提供了一个对象 exports
- exports 默认是空对象 [ ]
- 我们需要做的就是把所有需要被外部访问的成员挂载到这个 exports 这个对象中
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!