Node
Node是基于V8(谷歌浏览器引擎)下的一个JavaScript运行环境,让JavaScript变成服务器端语言。其本身可以单独启动服务,类似Nginx,但不如Nginx强大,配合使用就类似于Tomcat + Java更加完美;由于异步机制,在I(Input 输入) O(Output 输出)方面有极大优势。Node主要根据CommenJs定义的服务端规范来实现其功能。
常用全局对象
Node内置对象非常多,以下列举一些常用的对象及API
fs(File System)
文件操作对象
- fs.readFileSync(path) 同步读取文件
- fs.readFile(path) 异步读取文件
- fs.readdirSync(path) 同步读取目录
- fs.readdir(path) 异步读取目录
- fs.accessSync(path, fs.constants.F_OK) 判断路径是否存在
- fs.statSync(path[, options]) 返回一个fs.Stats对象
Process
系统进程对象
- process.argv 获取node参数
- process.env 获取环境变量
__filename
文件绝对路径
__dirname
文件夹绝对路径
Path
路径操作对象
- path.join(path, file) 路径拼接
- path.parse(path) 路径解析为对象
- base 修改文件名或后缀
- path.solve()
- path.resolve(path) 修复路径
Query String
请求参数字符串对象
- querystring.parse(str) 将字符串转化为对象
HTTP
HTTP协议对象,Node服务器核心
- http.createServer() 创建服务器
- server.on() 基于事件绑定
- request(req, res) 请求事件触发
- req 请求报文
- req.headers 请求头
- req.url 请求url
- req.method 请求方法
- res 响应报文
- res.setHeader() 一次设置响应头
- res.writeHead() 多次设置响应头
- res.write() 多次设置响应内容
- res.end(); 一次设置响应内容
- res.redirect(); 重定向
- req 请求报文
- request(req, res) 请求事件触发
- server.listen(80) 监听服务器端口80
- server.on() 基于事件绑定
简单服务器代码演示:
// 引入核心httpconst http = require('http');// 创建服务器let server = http.createServer();// 为服务器绑定请求事件server.on('request',(req,res) => {// 设置cookieres.setHeader('set-cookie','123');// 设置响应头res.writeHead(200,{'content-type':'text/html;charset=utf-8'});// 设置多次响应内容res.write('111');// 最终一次响应内容res.end('bilibili');});// 监听服务器server.listen(8080,()=>{console.log('服务器启动');});
NPM
NPM是Node的包管理工具,管理Node各种类型的工具包,其主要通过package.json来管理和配置文件依赖关系
npm基本操作:
- npm init [-y] 创建描述包package.json
- npm install package-name 下载包
- 不加包名即修复依赖所缺包
- —save or -S 记录依赖(dependencies)—生产
- —save-dev or -D 记录依赖(devDependencies)—开发
- —global or -g 全局安装
- npm uninstall package-name 删除包
- npm info package-name 查看包信息
- versions 包版本信息
- npm docs package-name 查看包的文档
- npm root -g 查看全局包的下载路径
NRM
是npm的镜像源管理工具,用来切换NPM源
- npm install -g nrm 全局安装
- nrm ls 查看当前可选的镜像源
- nrm use taobao 切换镜像源
- nrm add name link 自己添加源
NPM如何识别包的
- 逐级向上查找node_module,直到盘符根目录
- 查找node_modules下的该包文件夹中package.json的main属性(通用,优先级最高)
- 查找node_modules下的包名.js(少见,优先级其次)
- 查找node_modules下的该包文件中的index.js(常用)
Express和Koa
基于node的http对象实现,对比自己原生起服务,Express帮我们省略很多步骤,加入中间件路由等。Koa由Express原作者开发,实现了ES7的async函数
简单使用演示:
const express = require('express')const app = express()// 配置渲染引擎app.engine('.html',require('express-art-template'))// 设置环境app.set('view options', {debug: process.env.NODE_ENV !== 'production',})// 创建路由let router = express.Router()// 路由配置router.get('/', (req, res) => res.send('Hello World! this is get')).post('*', (req, res) => res.send('Hello World! this is post')).all('*', (req, res) => res.send('404 Not Find!'))// 处理静态资源app.use(express.static('./public'))// 使用路由app.use(router)// 监听端口app.listen(3000, () => console.log('Example app listening on port 3000!'))
