参考极客学院
本文将不断更新
p01初识nodejs
1.1.1认识nodejs
nodejs诞生于2008年,创建人是Ryan Dahl,他的目标是创建一个易扩展,适用于现代web应用通信的服务器平台 nodejs的主要应用领域为
- restful API
- 实时通信:如消息推送等
- 高并发
- i/o阻塞
nodejs分为nodejs和iojs,原因是nodejs的初衷是提升性能,而社区觉得需要将精力放于更多功能的开发,于是出现了分支,目前二者还是一致的。
1.1.2nodejs和javascript的关系
javascript = ECMAScript(语法) + BOM(浏览器对象) + DOM(文档对象)
2008年,V8随着Google Chrome一同面世
nodejs与JavaScript的关系:nodejs使js变成一门全栈语言,JavaScript使nodejs高并发成为可能

1.1.3 Node.js的特点
部署简单方便
- js原本就是运行在web,配置简单
- 使用npm易于扩展,需要使用的时候只需要将其载入即可
事件驱动
- js为浏览器而生,需要处理与浏览器的交互,使用函数来处理事件;nodejs同样事件驱动
异步编程
-
大部分语言是同步语言,代码一句句执行。执行完成当前的行才可以执行下一句,当处理网络请求,读取文件等操作时耗时多
-
Nodejs在进行I/O操作时异步
-
实现方式:Nodejs采用发布/订阅模式,维护一个注册机构,可以针对所有事件统一管理
高效与性能:待补充
单线程与多进程:待补充
1.2 nodejs开发环境搭建
1.2.1 nodejs开发环境
技术领域是没有门槛和限制的
web 全栈开发包括的方面:
HTML/css页面构建,浏览器端开发,服务器端开发,数据库管理,服务器运维
nodejs对应的:mongoDB数据库、express模块、angular框架、nodejs
nodejs的执行环境:google nodejs的开发环境主要是google的v8引擎,还有文件系统、网络功能、二进制数据、数据流、加密与解密。nodejs通过模块来使用,需要先引用模块,再使用。 nodejs不是编译型语言,所以开发工具的范围比较广。可以使用集成开发环境和文本编辑器。
1.2.2 macox 安装
- 环境依赖于xcode,先安装:
xcode-select --install
2.安装homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安装nodejs
brew install nodejs
- 安装mongodb,不支持brew install mongodb安装,可以参考官网
brew tap mongodb/brew
brew install mongodb-community
-
一款编辑器,我选择的是vscode。极客教程推荐的是webstorm和sublime,大家也可以试试
-
然后就可以测试是否安装成功

1.3 nodejs 常用开发工具的使用
1.3.1 开发工具的使用
1.3.2 npm与调试工具的使用
nodejs的功能以包存在 包的分类:在命令行下使用的,全局安装;在项目中使用的包,本地安装(即在项目中安装)
全局安装一下的包
- nodemon: 监听js文件的变化并实时运行
- pm2:常用的node进程管理工具
- node-inspector: nodejs的调试利器 另外,还需要简单了解chrome developer tool以及http通信
npm install express
可以安装淘宝镜像源(tnpm)
1.3.2 常用linux命令介绍
主要介绍三个方面的命令:文件与文件夹操作,系统管理,vi操作 top:查看进程情况 ps aux: 查看进程情况 ifconfig:打印网卡列表
1.4 基于nodejs的后端应用简介
http:


P02 nodejs的html模块和Url模块
以下代码均需要在vscode建一个node文件,node运行,并在浏览器访问页面;代码更新后文件重新运行,页面刷新)
http模块


如果需要打印中文,则要设置UTF-8的编码:
response.writeHead(200, {'Content-Type': 'text/plain;charset="UTF-8"'});
response.end('你好 World');
url模块
const url = require('url'),
api = 'http://localhost:8081?name=charmia&age=18';
console.log(url.parse(api,true)); //true表示进行解析

将http与url模块结合使用获取参数
const http = require('http');
const url = require('url');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain;charset="UTF-8"'});
const myUrl = request.url;
console.log(request.url);
if(myUrl === '/favicon.ico') {
response.end('hello');
} else {
const userInfo = url.parse(myUrl, true).query;
console.log(userInfo);
response.end(`${userInfo.name},${userInfo.age}`);
}
}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');
访问localhost:8081?name=charmia&age=1
- 我们vscode的termanal相当于后台的控制台,打印出
Server running at http://127.0.0.1:8081/
/?name=charmia&age=1
{ name: 'charmia', age: '1' }
/favicon.ico
2.页面显示“response.end()”的内容
charmia,1
P03 Nodejs中supervisor工具的使用
在上一节当中,服务端的js代码只有在第一次引用,才会重新加载;如果node已经加载了某个文件,即使我们更新了js文件,node也不会重新加载这个文件。supervisor是可以解决这个问题
全局安装:
npm install -g supervisor
使用supervisor替代node命令运行js文件
supervisor test.js
更新代码,访问接口,看nodejs是否会自动重载
P04 Commonjs,Nodejs模块,自定义模块
commomJs是啥