0. 知识点
- 多人社区案例
1. path路径操作模块
常用Node.js参考文档链接:
- path.basename
- 获取一个路径的文件名(默认包含扩展名)
- path.dirname
- 获取一个路径中的目录部分
- path.extname
- 获取一个路径的扩展名部分
- path.parse
- 把一个路径转为对象
- root 根路径
- dir 目录
- base 包含后缀名的文件名
- ext 后缀名
- name 不包含后缀名的文件名
- 把一个路径转为对象
- path.join
- 当你需要进行路径拼接时候,推荐使用该方法
- path.isAbsolute
- 判断一个路径是否是绝对路径
2. Node中的其他成员
-
在每个模块中,除了require、exports等模块相关 API之外,还有连个特殊的成员
- __dirname 动态获取当前文件模块所属目录的绝对路径
- __filename 动态获取当前文件的绝对路径
- __dirname和__filename是不受执行node命令所属路径影响的
-
在文件操作中,使用相对路径是不可靠的,因为在Node中文件操作的路径被设计为相对于node命令所处的路径(不是bug,这样设计是有使用场景的)。
-
所以为了解决这个问题,很简单,只需要把相对路径变为绝对路径就可以了
-
那这里我们就可以使用__dirname或者__filename来帮我们解决这个 问题了
-
在拼接路径的过程中,为了避免手动拼接来的一些低级错误,所以推荐多使用:path.join()来辅助拼接的。
fs.readFile(path.join(__dirname,'./a.txt'),'utf8',function(err,data){
})
- 所以为了尽量避免刚才所描述的问题,大家以后在文件操作中使用的相对路径都统一转换为动态的绝对路径
- 补充:模块中的路径标识和这里的路径没有关系,不受影响(相对于文件模块)
- 模块中的路径标识和文件操作中的相对路径标识不一致
- 模块中的路径标识就是相对于当前文件模块,不受执行node命令所处路径影响require(‘./b’)
3. 模板引擎
- 在node中,有很多第三方模板引都可以使用,不是只有 art-template
- art-template
- ejs
- jade(pug)
- handlebars
- nunjucks
4. 复习
- MongoDB数据库
- 灵活
- 不用设计数据库
- 业务的改动不需要关心数据表结构
- DBA架构师级别的工程师都需要掌握这项技能
- mongoose
- mongodb 官方包也可以操作MongoDB数据库
- 第三方包: WrodPress 项目开发团队
- Promise
- callback hell 回调地狱
- 回调函数中套回调函数
- Promise(ES6)中新增的语法 API
5. 案例:
5.1 项目目录结构
|- app.js
|- controllers
|- models
|- node_modules 第三方包
|- package.json 包描述文件
|- package-lock.json 第三方包版本锁定文件(npm 5 以后才有)
|- public 公共的静态资源
|- README.md 项目说明文档
|- routes
|- views 存储视图目录
- mkdir blog
- cd blog
- npm init -y
- git init
- git init 使用git上传至github
新建 .gitignore用于限制上传github的文件 - cnpm i express mongoose
5.2 模板页
- art-template 子模板
- {{include ‘./header.art’}}
{{include ‘./header.art’ data}}
- {{include ‘./header.art’}}
- art-template 模板继承
- {{extend ‘./layout.art’}}
{{block ‘head’}} … {{/block}}
- {{extend ‘./layout.art’}}
5.3 路由设计
- 路径 方法 get参数 post参数 是否需要权限 备注
- / GET 渲染首页
- /register GET 渲染注册页面
- /register POST email、nickname、password 处理注册请求
- /login GET 渲染登录页面
- /login POST email、password 处理登录请求
- /logout GET 处理退出请求
5.4 模型设计
5.5 功能实现
5.6 书写步骤
- 创建目录结构
- 整合静态页-模板页
- include
- block
- extend
- 设计用户登录、退出、注册的路由
- 用户注册
- 先处理好客户端页面的内容(表单控件的name,收集表单数据)
- 服务端
- 获取客户端表单请求的数据
- 操作数据库
- 如果有错,发送500告诉客户端服务器错了
- 其他根据业务发送不同的响应数据
- 用户登录
- 用户退出
- 在Express配置使用express-session插件
- 参考文档:https://github.com/expressjs/session
- 安装:
- npm install express-session
- 配置:
// 该插件会为req请求对象添加一个成员:req.session默认是一个对象
// 这是最简单的配置方式,暂且先不用关心里面参数的含义