一、Node.js是什么?
Node.js是一个基于Chrome V8引擎的javaScript运行环境,首先对于概念来讲,一定要记住它只是一种运行环境,并不是一种编程语言。
- 下载:在http://nodejs.cn/中文网或者https://nodejs.org/英文网下载并安装
- 安装好之后可以在命令行执行node-v查看node版本
- 执行npm-v查看包管理的版本
二、Node.js VS Chrome
既然二者都是运行环境,可以简单对比一下,方便记忆。
- 基于V8引擎,符合js代码运行机制
- 核心机制:V8引擎
- Chrome更强大,还有渲染引擎,以及Bom Api的支持
三、浅谈Node.js
1、为什么要学习Node,js?
- 前端工程化已经离不开Node
- 全栈开发者,几乎零成本的方式学习后端开发
2、Node,js有什么特点?
- 基于Chrome V8引擎
- 事件驱动
- 非阻塞I/O (几段代码同时运行互不干扰, I:input O:output 指数据的流入与流出)
3、学习资源
- Node中文网,查看api文档
- Node中文网 “入门教程”
- cnode
4、Node代码运行的两种方式
- node命令行的交互式环境,直接输入node
- 使用"node 文件名.js " 运行js脚本,按Tab可以自动补全
5、Node与Chrome的api差异
- Chrome = BOM + DOM + ECMAScript
- node = ECMAScript + node内置的api
特别注意
- 不同版本的node,支持的ECMAScript的语法是不一样的
- 尽管在最新的版本下,ECMAScript的语法也并不是完全支持的,比如import、export、装饰器语法等,内置支持common.js语法。
- node中也有全局对象,但不是window,是global
6、Node搭建服务器
- common.js模块化语法、路径、后缀、nodemon/supervisor
7、Express搭建服务器
- npm&yarn
四、什么是服务器?
凡是可以为客户端提供数据等服务的应用程序,都是服务器。
服务器要具备哪些能力?
- 接收请求的能力
- 数据处理的能力
- 发送响应的能力
五、使用两种方式搭建服务器
Node.js原生Api 搭建服务器
// CommonJS模块化语法
// module.exports = {} exports 导出
// require 导入
var http = require('http')
var fs = require('fs')
var path = require('path')
// req - request 表示请求体对象,它代表的是客户端向服务器发起的请求过程
// res - response 表示响应体对象,它代表的是服务器对客户端的响应过程
// 创建一台服务器,提供两种类型的资源:静态资源和动态资源
var server = http.createServer(function(req, res) {
// 第一件事,接受请求
var url = req.url // 路由
url = url==='/' ? '/index.html' : url
// fs.createReadStream('./public'+url).pipe(res)
// path.json()/path.resolve() 把多个路径片段,拼接或解析成一个绝对路径
fs.createReadStream(path.resolve(__dirname, './public'+url)).pipe(res)
})
// 建议使用8000以上的四位数
server.listen(8888, function() {
console.log('server is running on 8888')
})
用Express 重构WebServer
- 在命令行执行 npm init
- 安装: $cnpn install express -S
- 创建server.js
var express = require('express')
var server = express()
// 静态资源
// 使用中间件、指定静态资源服务器的目录所在
server.use(express.static('public'))
// 动态资源
server.get('/test', function(req, res) {
// 根据入参,查询数据库,处理数据,响应给客户端
res.json({err: 0, msg: 'success', data: [1,2,3,4]})
// res.send('hello express')
})
server.listen(8889, function() {
console.log('server in running on 8889')
})