Node.js 第六天笔记
知识点
- 多人社区案例
其他
path路径操作模块
- path.basename 获取一个路径的文件名(默认包含扩展名)
- path.dirname 获取一个路径中的目录部分
- path.extname 获取一个路径的扩展名部分
- path.parse 把一个路径转为对象,
- root 根路径
- dir 目录
- base 包含后缀名的文件名
- ext 后缀名
- name 不包含后缀名的文件名
- path.join 当你需要进行路径拼接时候,推荐使用该方法
- path.isAbsolute 判断一个路径是否是绝对路径
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’)
模板引擎
在node中,有很多第三方模板引都可以使用,不是只有 art-template
- art-template
- ejs
- jade(pug)
- handlebars
- nunjucks
复习
- MongoDB数据库
- 灵活
- 不用设计数据库
- 业务的改动不需要关心数据表结构
- DBA架构师 级别的工程师都需要掌握这项技能
- mongoose
- mongodb 官方包也可以操作MongoDB数据库
- 第三方包: WrodPress 项目开发团队
- Promise
- callback hell 回调地狱
- 回调函数中套回调函数
- Promise(ES6)中新增的语法 API
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
2. 模板页
- art-template 子模板
- {{include ‘./header.art’}}
{{include ‘./header.art’ data}}
- {{include ‘./header.art’}}
- art-template 模板继承
- {{extend ‘./layout.art’}}
{{block ‘head’}} … {{/block}}
- {{extend ‘./layout.art’}}
3. 路由设计
路径 方法 get参数 post参数 是否需要权限 备注
/ GET 渲染首页
/register GET 渲染注册页面
/register POST email、nickname、password 处理注册请求
/login GET 渲染登录页面
/login POST email、password 处理登录请求
/logout GET 处理退出请求
4. 模型设计
5. 功能实现
6. 书写步骤
- 创建目录结构
- 整合静态页-模板页
- include
- block
- extend
- 设计用户登录、退出、注册的路由
- 用户注册
- 先处理好客户端页面的内容(表单控件的name,收集表单数据)
- 服务端
- 获取客户端表单请求的数据
- 操作数据库
- 如果有错,发送500告诉客户端服务器错了
- 其他根据业务发送不同的响应数据
- 用户登录
- 用户退出
在Express配置使用express-session插件
参考文档:https://github.com/expressjs/session
安装:
npm install express-session
配置:
// 该插件会为req请求对象添加一个成员:req.session默认是一个对象
// 这是最简单的配置方式,暂且先不用关心里面参数的含义