什么是Node.js
- 与JS的区别
- 基于异步I/O相关接口
- 基于node_modules和require的模块依赖
- 提供C++ addon API与系统交互
- 可以干什么?
- 运行在服务端
- 可以做命令行脚本
- 可以做客户端软件
- 可以运行在IoT软件中
Node.js基础
- 引入fs模块进行读写,raedFile为异步操作
- 模块
- 内置模块:编译进Node中,直接require
- 文件模块:原生模块之外的模块,和文件夹一一对应
- 直接调用文件,就可以使用暴露的方法,文件中使用exports进行方法暴露。
- 模块加载
- 绝对路径
- 相对路径
- 无后缀文件
- 加载外部模块,逐级向上查找。
- 模块类型:.js/.json/.node/.mjs/…
- 模块路径查找
- 绝对路径
- 相对路径
- 模块、文件夹
- 原生模块,直接读取缓存
- 依次向上级查找
- 解析json.js,查找main属性,没有则index.js
- 没找到则报错
- js模块解析
- 使用闭包进行包裹
- 通过vm.rumlnThisContext执行
- 获取module对象的值作为模块返回值
- 模块缓存
- 模块加载后会将返回值缓存
- 下次加载直接读取缓存结果,节省文件I/O和解析时间
NPM
- Node包管理器
- 包管理
- package.json在包顶级目录下,存储一些包的信息
- 重要信息:main(记录入口文件),npm scripts(表示一些常有的快捷方式)bin,semversion(版本规范),registry(代理,指定源)
- 重要依赖:dependencies\devDependencies\peerDependencies\bundleDependencies\optionalDependencies
- 二进制文件:bin目录
- JS代码:lib目录
- 文档:doc目录
- 单元测试:text目录
- package.json在包顶级目录下,存储一些包的信息
- 包依赖
- *接收任意版本的更新
- 不带符号表示只接受该版本
- NPM问题
- 速度
- 安全:npm audit可以检测安全性
基于Node.js的Web开发
- 使用HTTP模块建立Web服务
- Koa模块:建立web服务的模块封装,自由性高,中间件繁多,不利于团队开发
- THINKJS:企业级目录规范
- 包含路由模块,数据库模块,缓存模块等
- 实现模块统一和目录规范的统一
- ToDo实战
- Restful接口规范
- 每个API对应一种资源或资源集合
- 使用HTTP Method表示对资源的动作
- 使用HTTP Status Code表示资源操作结果
- RESTful API
- GET /ticket获取列表
- GET /ticket/:id查看某个具体的ticket
- POST /ticket/新建一个
- PUT /ticket/:id更新一个
- DELETE /ticket/:id删除一个
- Restful接口规范
- 模型的优点
- 简化代码,提高效率
- 可以操作数据库
- 安全
- Node.js调试
- 日志调试(console.log)
- 断点调试