引子
前端其实只有三种技术:
html,css,js
后端有很多技术:
java,php,python,Ruby(github 就是ruby做的),.net…….
node.js(我们选择的),
凡是能用JS能实现的,最终都会用js实现
其实他们都可以实现相同的功能
node.js是什么?
他不是什么:
- 不是一个语言
- 不是库
- 不是框架
浏览器中的Javascript
ecmascrpt:
- 基本的语法
- if
- var
- funciton
- ….
bom
浏览器对象模型
dom
文档对象模型
node.js中的javascript
没有bom.dom :不处理页面的
在node.js这个运行环境中为javascript提供了一些服务器级别的api
- 文件的读写
网络服务的构建
网络通信
http服务等
….
官网源说明
- Node.js® is a JavaScript runtime(运行时) built on Chrome’s V8 JavaScript engine.(它可以解析执行Js,以前只有浏览器可以解析执行js,可以说是一个运行环境,构建于chrome的V8
- Node.js uses an event-driven(事件驱动), non-blocking(非阻塞,简单来讲就是异步操作) I/O model that makes it lightweight and efficient.
- Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world. (源自官网)(npm是基于nodejs开发的包管理工具)
绝大多数的javascript包都存放在了npm上,目的是让开发人员更方便的使用
node.js介绍
能做什么?
- web服务器后台
- 命令行工具
npm(基于node开发的)
git(c语言开发的)
hexo
….
对于前端开发工程师来讲,我们接触node 最多的其实是它的命令行工具
自己写的很少,大多是用第三方的
webpack
gulp
npm
hexo
预备知识
简单的命令行操作
cd
dir
is
mkdir
rm
推荐的书籍
《深入浅出node.js》:纯理论,纯底层,可以帮助理解底层(不推新手阶段看)
《node.js权威指南》:API讲解,没有实战,没有业务,偏理论
《node入门》很重要,要看
node.js官方API
node.js中文社区:
《JavaScript 高级编程》第三版
《JavaScript 语言精粹》
能学到啥?
b/s编程模型:
browser-server
back-end
任何服务端技术 B/S 编程模型都是一样的.和语言无管。就只是语言和api不同
模块化编程:
requireJs
SeaJs
以前认知的js只能通过script标签加载,在node中可以像@import一样引用加载JS脚本文件
node.js常用的API
异步编程
回调函数
promise
async
generator
express web 开发框架
ecmascript6
一个新语法而已
安装node环境
下载:
重新安装就会覆盖升级
确定node是否安装成功:
cmd->node --version
node 中的JavaScript
1.emcaScript
没有dom 和 bom
2.核心模块
node为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到一个具名的核心模块中去了
例如:文件操作的fs模块,http服务构建的http模块,path路径操作模块,os操作系统信息获取……核心模块想要使用需要引用。require就是用来加载模块的
require
require 是一个方法,他的作用就是来加载模块并执行里面代码,在node中,模块有三种
具名的核心模块,例如:fs,http
用户自己编写的:就是自己写的js文件,相对路径必须加./,因为去了之后,node会把路径当做核心模块
require('./b.js')//.js的后缀名可以省略
在node中没有全局作用域,只有模块作用域
不同文件之间不会互相影响,就算调用,外部访问不到内部,内部也访问不到外部
3.第三方模块(也可以是用户自定义模块)
要想访问到, 可以用以下方法:
每个模块(文件)都有一个exports对象,要想让这个文件中的元素被外界访问到,就需要把元素挂在到exports对象中。
require有两个作用:
1.加载模块文件并执行
2.拿到exports这个接口对象
IP和端口号
ip:一台计算机只有一个物理网卡,在同一个局域网中,IP地址必须是唯一的。网卡是通过IP地址来进行定位的。
IP地址用来定位计算机。端口用来定位计算机中的软件。
可以同时开启多个服务,但是一定要确定占用的端口号不一样(计算机中,同一个端口号,同一时间,只能被一个程序占用)
响应内容类型(Concent-Type)
中文乱码问题
在服务器默认发送的数据,UTF8编码的内容,但是浏览器不知道我们是UTF8编码的内容,会按照计算机默认的操作系统去解析(中文操作系统时GBK编码)
解决方法:正确的告诉浏览器,我给你发送的内容是什么编码的
res.setHeader(‘Content-Type’,’text/plain;charset:utf-8’)
要想让浏览器按照一定方式去渲染代码,concent-type应有不同的形式:
text/html,text/plain