一、Node.js内置模块
1、fs模块:操作文件,读取文件内容或向文件写入内容
readFile(path,[options],callback),
writeFile(path,data,[options],callback),
appendFile(path,data,[options],callback)
2、 path模块:处理文件路径
path.join([…options])
path.parse(),
path.basename(path[,ext]),
path.extname(path),
path.dirname(path)
3、http模块 :创建web服务器
http.createServer()
server.on(‘request’,(req,res)=>{})
server.listen(8080,()=>)
req.url
res.end()
res.setHeader()
二、自定义模块:
一个JS文件,通过require()引入,且路径标识符以‘./’,‘…/’开头,否则当成内置模块或第三方模块处理。
module对象 ,exports属性
exports对象,
注:module.exports对象默认指向同一个对象,若指向不同对象,以module.exports指向的对象为准。
三、第三方模块(包)
1、安装第三方模块:npm install 包名 -g npm uninstall 包名
2、nodemon工具:监听项目文件改动
3、moment:格式化时间
4、node_modules目录:存放第三方模块(分享时需要删除)
5、package-lock.json:记录node_modules目录中每一个包的下载信息,使用npm install命令将自动安装
6、dependencices:记录安装模块信息,开发环境和生产环境均可使用。
7、devdependencies:记录只能在开发环境使用的模块,安装命令: npm install 包名–save-dev
8、nrm 工具:切换服务器下载地址
如:nrm ls ,nrm use
9、自定义模块结构:
1、每个功能模块都是一个单独的目录文件
2、包的顶级目录中包含package.json配置文件,且包含name,version,main(),description,keywords,license
3、npm login
4、npm publish
5、npm unpublish 包名 --force: 只能删除72小时内发布的包,超过72小时的将无法删除。被删除的包24小时内不能再次发布
注:name 若已存在,发布将失败
四:express框架:基于node.js平台,快速,开放,极简的web 开发框架
1、安装命令:npm install express
2、app=express()方法创建web服务器
3、app.listen(8080,()=>{}):监听端口号
4、app.get(‘url’,(req,res)=>{}) :监听get请求
5、res.send():响应给客户端
6、app.post(‘url’,(req,res)=>{}) :监听post请求
7、req.query:获取地址中的参数
8、req.params:获取动态参数,如/:id(动态参数)
9、express.static():托管静态资源,托管多个静态资源,多次调用static(),会按先后顺序查找文件,找到文件则结束。
10、app.use([路径,] express.stataic(‘’)):注册全局中间件,多个全局中间件会按先后顺序依次调用
11、模块化路由:express.Router()方法,创建路由对象,通过module.exports向外共享实例对象。
12、express中间件:包含next 形参,并在事件中调用next()的function处理函数。调用了next()表示把处理结果交给下一个中间件或路由。
13、多个中间件的req,res时共享的。
15、中间件分类:
应用型中间件:通过app.use(),app.get().app.post()绑定到app实例上的中间件
路由型中间件:绑定到express.Router()实例上的中间件
错误型中间件:捕获项目中的异常错误,防止项目崩溃。参数:err,req,res,next,与普通中间件相比,新err 如:(err,req,res,next)=>{}
Express内置中间件:static(),json,urlencoded
第三方中间件:
注:中间件需定义在路由之前,但错误类型中间件定义在所有路由之后
16、Express接口跨域:CORS插件(支持get,post,head),JSONP接口(只支持GET,定义在cors 中间件之前,否则被处理成cors) . ,设置响应头(Access-Control-Alow-Methods。
17、Express框架操作mysql数据库
const db=mysql.createPool({ host:‘’,user:‘’,password:‘’,database:‘’})
db.query(sql,(err,result)=>{}) :执行SQL 语句,select 查询结果永远是一个数组。占位符用?
18、Exprss框架身份认证
1、Web开发模式:服务器端渲染(企业类型网站,session认证),前后端分离(管理系统,JWT认证)
2、express-session中间件。
app.use(session({参数列表})):配置session 中间件
req.session.属性:存储用户信息
req.session.destroy():删除session,
3、JWT认证:一段字符串,包含头部,载荷,签证(“.”分隔)
jsonwebtoken:生成JWT字符串
express-jwt:将JWT字符串还原成json对象
jsonwebtoken.sign(用户对象,加密秘钥,配置对象(有效期等):生成JWT串
express-jwt.JWT({secret:秘钥}):解析token
express-jwt.unless({path:不需要访问权限的接口地址正则表达式}):指定哪些接口不需要访问权限
req.user:获取用户信息
五、node.js事件循环:对JS的调度方式,主要调度事件,渲染数据等
1、 浏览器事件循环的步骤:
所有的同步任务在主线程上执行,形成执行站
除了主线程,“任务队列”等待异步操作
主线程所有同步任务执行完毕,立即执行微任务开始执行任务队列。
2、 宏任务与微任务:
宏任务:主线程任务
微任务:包括Promise的回调函数、MutationObserver的回调函数、process.nextTick(Node.js)以及async/await的回调函数
3、node.js事件循环:
timer:定时器,执行setTimeout()回调函数
I/O callbacks:大多数回调函数在此阶段执行,除了timers回调和colse callbacks回调
idle:此阶段在内容使用,无须理会
poll:轮询检索I/O事件,可能会发生阻塞(很重要)
check:执行setImmediate()设置的回调函数
colse callbacks:关闭事件的回调,无须理会
注:poll阶段分两种情况:
1、无timer定时器,若Poll不为空,则同步执行Poll,直到Poll为空,若Poll为空,如果有setImmediate()回调函数,则结束,进行check阶段;若没有setImmediate(),事件阻塞在Poll阶段,等待回调函数的加入。
2、有timer定时器。若Poll为空闲状态,检查定时器事件是否已经到达,若达到,则按照顺序进去timers阶段
六、Koa框架
1、context对象:处理请求的上下文,通过context响应数据。
2、context.request:包含所有和请求相关的属性,获取请求方式()method,URL(url),头(header)。
3、context.response属性:包含响应的相关属性,status,header,body.
4、为方便,可以省略response,request直接context.属性
5、koa-bodyparser模块:获取请求数据
6、同步中间件的执行顺序:洋葱模型