Node
node nvm
基础介绍
浏览器js解析引擎解析我们写的js执行浏览器的一些API(BOM,DOM,AJAX)
node.js 基于V8的js引擎
node.js 中无法调用BOM DOM AJAX
- Chrome V8
- Firefox OdinMonkey(奥丁猴)
- Safri JSCore
- IE Chakra(查克拉)
内置module
fa
操作文件
const fs = require('fs')
fs.readFile(path,[opeion],callback)
fs.writeFile()
//1. 只可创建文件,不可创建路径
//2. 覆盖写入
__dirname
//当前文件所处目录
path
const path = require('path')
path.join()
path.basename()
path.extname()
HTTP
基本HTTP服务创建
const baseHttp = require('http')
const httpServer = baseHttp.createServer()
httpServer.on('request',function(req,res){
console.log('request path:' + req.url + 'request method: ' + req.method )
req.setHeader('ContentType','text/html;charset=utf8')
res.end('hello world')
})
httpServer.listen(80,function(){console.log('run httpserver in 80')})
模块化
模块化好处
- 复用
- 可维护性
- 按需调用
require 调用模块后即执行该模块的代码
模块作用域 防止全局变量污染
module对象
// 导出对象
module.exports()
exports.method = ()=>{}
两者都指向module.exports 对象,最终以module.exports 为准
CommonJS
每个模块内部,module 变量代表当前模块
module 变量是一个对象,它的 exqorts 属性是对外接口
加载某模块,就是加载 module.exports 属性,require 用于加载模块
加载机制
首先从缓存中加载
加载自定义模块需
./ ../
路径标识符第三方模块逐级往上查找至根目录
npm 与 包
版本号
2.24.0
大版本 功能版本 bug修复版本
前面版本号增长了,后面归零
pockage.json 节点
devDependencies 开发过程使用的节点
dependencies
切换npm sources
npm config get registry
npm config set registry=
npm i nrm -g
nrm ls
nrm use
Express
http的封装
const express = require('express')
const app = express()
app.get('/about',(req,res)=>{
res.send('hello world')
})
app.listen(80,()=>{})
路由
中间件
注意事项
路由之前注册
可连续调用多个中间件
中间件 调用 next()
中间件调用 next()后尽量不要写了
多个中间件之间共享
req res
局部中间件
中间件分类
应用级别
- 绑定到app上的(全局)
路由级别
错误级别
- 参数 error,req,res,next
- 所有路由之后捕获全部异常防止程序终止
内置
- static
- json
- 4.16.0+ 版本可用
- urlencoded
第三方中间件
- body-parser 以弃用
跨域问题
JSONP
浏览器通过 script src 请求数据,返回函数调用
- get请求
- 非AJAX,未使用XMLHttpRequest
CORS 主流
- CORS Cross-Origin-Resource Sharing,跨资源共享
- 支持
XMLHttpRequest Level2
方可用 - Access-Control-Allow-Origin
- Access-Control-Allow-Headers
- 通过设置该响应头 允许浏览器发送某些请求头
- Access-Control-Allow-Methods
- 允许通过 PUT DELETE请求
- 支持
简单请求
- GET POST HEAD请求
- 九个请求头
预简请求
发送 option 请求进行预简
其他请求类型
包含自定义请求头
发送 application/json 格式数据
JSONP (只支持GET)
JWT
json web token
Header Payload Signature