1. Node.js介绍
1.1 Node.js是什么
Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
- Node.js不是一门语言
- Node.js不是库、不是框架
- Node.js是一个JavaScript运行时环境
- 简单点来讲就是Node.js可以解析和执行JavaScript代码
- 以前只有浏览器可以解析执行JavaScript代码
- 也就是说现在的JavaScript可以完全脱离浏览器来运行,一切都归功于:Node.js
-
浏览器中的JavaScript
- ECMAScript
- 基本的语法
- if
- var
- function
- Object
- Array
- BOM
- DOM
Node.js中的JavaScript
- 没有BOM、DOM
- ECMASCRIPT
- 在Node这个JavaScript执行环境中为JavaScript提供了一些服务器级别的操作API
- 文件读写
- 网络服务的构建
- 网络通信
- http服务器
- 等处理…
Node.js是构建与 Chrome的V8引擎的JavaScript 运行环境
- 代码只是具有特定格式的字符串而已
- 引擎可以认识它,引擎可以帮你去解析和执行
- Google Chrome 的V8引擎是目前公认的解析执行JavaScript代码最快的
- Node.js的作者把Google Chrome中的V8引擎移植了出来,开发了一个独立的JavaScript运行时环境。
Node.js uses an event-driven,non-blocking I/O model that makes it lightweight and efficient.
- event-driven 事件驱动
- non-blocking I/O model 非阻塞IO模型(异步)
- lightweight and efficient 轻量和高效
Nodejs package ecosystem,npm,is the largest ecosystem of open source libraries in the world.
- npm 是世界上最大的开源生态系统
- 绝大多数JavaScript相关的包都放在了Npm上,这样做的目的是让开发人员更方便的去下载使用。
- npm install jquery
1.2 Node.js能做什么?
Web 服务器后台
命令行工具
- npm(node)
- git(c语言)
- hexo(node)
- webpack
对于前端开发工程师来将,接触node最多的是它的命令行工具
自己写的很少,主要是使用别人第三方开发的
- webpack
- gulp
- npm
1.3 预备知识
- HTML
- CSS
- JavaScript
- 简单的命令行工具
- cd
- dir
- ls
- mkdir
- rm
- 具有服务端开发经验更佳
- java
- php
1.4 学习资源
- 《深入浅出Node.js》
- 《Node.js权威指南》
- JavaScript标准参考教材:阮一峰
- Node入门
- 官方API文档
- 中文文档(版本比较旧,凑合看)
- CNODE社区: http://cnodejs.org
- CNODE-新手入门:
1.5 这门课能学到什么?
B/S编程模型
- Browse-Server
- back-end
- 任何服务端技术这种BS编程模型都是一样的,和语言无关
- Node只是作为我们学习BS编程的一个工具而已
模块化编程
- RequireJS
- SeaJS
- 在Node中可以像
@import()
一样来引用加载JavaScript脚本文件
Node常用API
- 异步编程
- 回调函数
- Promise
- async
- generator
- Express Web 开发框架
- ECMAScript 6
- ……
- 学习Node不仅会帮助打开服务器端黑盒子,同时会帮助学习以后前端高级内容
- Vue.js
- React
- Angular
2. 起步
2.1 安装
- 查看当前Node环境版本号
- 下载:https://nodejs.org/en/download/
- 安装:
- 傻瓜式的一路
next
就可以了 - 对于已经安装过的,重新安装就会升级、
- 傻瓜式的一路
- 确认Node环境是否安装成功
- 打开命令行,输入
node --version
- 或者
node -v
- 打开命令行,输入
- 环境变量
修改完代码自动重启
nodemon是一个基于Node.js开发的一个第三方命令行工具,我们使用的时候需要独立安装:
npm install --global nodemon
安装完毕之后,使用:
node app.js
#使用nodemon
nodemon app.js
只要是通过 nodemon app.js启动的服务,则它会监视你的文件变化,当文件发生变化的时候,自然帮你重启服务器。
2.2 hello world
- 创建编写JavaScript脚本文件,helloworld.js
- 打开终端,定位到脚本文件所属目录,cd 目录名
- 输入
node 文件名
执行对应的文件 - ps: 文件名不要使用
node.js
来命名,而且最好不要使用中文来命名。 - 解析执行JavaScript
- 读写文件
- http
补充:
浏览器中的JavaScript是没有文件操作的能力的
但是,Node中的JavaScript具有文件的操作能力
响应内容只能是二进制数据或者字符串
- 数字
- 对象
- 数组
- 布尔值
上述,均可转换成二进制或者字符串(通过JSON.stringify()方法)
2.3 文件读取
// 浏览器中的JavaScript是没有文件操作的能力的
// 但是Node中的JavaScript具有文件操作的能力
// fs是file-system的简写,就是文件系统的意思
// 在Node中如果想要进行文件操作,就必须引入fs这个模块
// 在fs这个核心模块中,就提供了所有的文件操作现相关的API
// 例如: fs.readFile就是用来读取文件的
// 1. 使用require方法加载fs核心模块
var fs = require('fs');
// 2. 读取文件 第一个参数就是要读取的文件路径
// 第二个参数是一个回调函数
// error 读取失败,error就是错误对象,读取成功,error就是null
// data 如果读取成功,data就是读取到的数据 读取失败,error就是错误对象
fs.readFile('./data/hello.txt', function(error,data){
// 文件中存储的其实就是二进制数据 0 1
// 这里为什么看到的不是0和1呢?原因是二进制转为16进制了
// 但是无论是二进制还是16进制,人类都不认识
// 所以我们可以通过toString方法把其转为我们能认识的字符
if(err){
console.log('读取文件失败');
}else{
console.log(data.toString());
});
}
2.4 文件写入
var fs = require('fs');
// 第一个参数:文件路径
// 第二个参数:文件内容
// 第三个参数:回调函数
fs.writeFile('./data/writeFile.txt','大家好,我是写入的内容',function(error){
if(error){
console.log('写入失败了');
}else{
console.log('文件写入成功');
}
});
2.5 http
// 使用Node非常轻松的构建一个web服务器
// 在Node中专门提供了一个核心模块,http
// http这个模块职责就是帮助创建编写服务器的
// 1. 加载http核心模块
var http = require('http');
// 2. 使用http.createServer()方法创建一个web服务器
// 返回一个Server实例
var server = http.createServer();
// 3. 服务器作用? 提供服务:数据服务
// 浏览器发请求——接收请求——处理请求——给个反馈(发送响应)——注册request请求事件
// 当客户端请求过来,就会自动触发服务武器的request请求事件,然后执行第二个参数:回调处理
server.on('request',function(){
console.log('收到客户端的请求了');
});
// 4. 绑定端口号,启动服务器
server.listen(8888,function(){
console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/ 来进行访问');
});`
// 使用Node非常轻松的构建一个web服务器
// 在Node中专门提供了一个核心模块,http
// http这个模块职责就是帮助创建编写服务器的
// 1. 加载http核心模块
var http = require('http');
// 2. 使用http.createServer()方法创建一个web服务器
// 返回一个Server实例
var server = http.createServer();
// 3. 服务器作用? 提供服务:数据服务
// 浏览器发请求——接收请求——处理请求——给个反馈(发送响应)——注册request请求事件
// 当客户端请求过来,就会自动触发服务武器的request请求事件,然后执行第二个参数:回调处理
server.on('request',function(){
console.log('收到客户端的请求了');
});
// 4. 绑定端口号,启动服务器
server.listen(8888,function(){
console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/ 来进行访问');
});
2.6 http案例
var http = require('http');
// 1. 创建Server
var server = http.createServer();
// 2. 监听request请求事件,设置请求处理函数
server.on('request',function(req,res){
// console.log('收到请求了,请求的路径是:'+ req.url);
// res.write('hello world');
// res.end();
// 上面的方式比较麻烦,推荐使用更简单的方式,直接end的同时
//res.end('hello node.js');
// 根据不同的请求路径发送不同的响应结果
// 1. 获取请求的路径
// req.url 获取到的是端口号之后的那一部分路径
// 也就是说所有的url都是以 / 开头的
// 2. 判断路径处理响应
var url = req.url;
/*switch (url) {
case '/':
res.end('index page');
break;
case '/login':
res.end('login page');
break;
default:
res.end('404 not fund page');
break;
}*/
if(url === '/products'){
var products = [
{
name: '苹果',
price: 2222
},
{
name: '栗子',
price: 3333
},
{
name: '桃子',
price: 4444
}
]
res.end(JSON.stringify(products));
}
});
// 3. 绑定端口号,启动服务
server.listen(8000,function(){
console.log('服务器启动成功,可以访问了!');
});
3. Node中的JavaScript
- ECMAScript
- 没有DOM、BOM
- 核心模块
- 第三方模块
- 用户自定义模块
3.1 核心模块
- Node为JavaScript提供了很多服务器级别的API,这些API就大多数都被包装到了一个 具名的核心模块中了。
- 例如:
- 文件操作的
fs
核心模块 - http服务构建的
http
模块 path
路径操作模块os
操作系统信息模块- …
- 文件操作的
- 以后只要模块是一个核心模块,就要如下使用它:
var fs = require('fs');
var http = require('http');
Node中,模块有三种:
- 具名的核心模块,例如:fs,http
- 用户自己编写的文件模块(相对路径必须加./)
在Node中,没有全局作用域,只有模块作用域
- 外部访问不到内部
- 内部也访问不到外部
require方法有两个作用:
- 加载文件模块并执行里面的代码
- 拿到被加载文件模块导出的接口对象
- export 默认是一个空对象
3.2 用户自定义模块
- require
- exports
3.3 第三方模块
4. Web服务器开发
4.1 IP地址和端口号
- 所有联网的程序都需要进行网络通信
- 计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的。
- 网卡是通过唯一的IP地址来进行定位的。
- IP地址用来定位计算机
- 端口号用来定位具体的应用程序(所有需要联网通信的软件都必须具有端口号)
- 一切需要联网通信的软件都会占用一个端口号
- 端口号的范围从:0-65536之间
- 在计算机中有一些默认端口号,最好不要去使用
- 例如http服务的80
- 我们在开发过程中使用一些简单的好机的就可以了,例如3000,5000等没有什么含义
- 可以同时开启多个服务,但一定要确保不同服务占用的端口号不一致才可以
- 说白了,在一台计算机中,同一个端口号同一时间只能被一个程序占用。