知识点
根据系统环境变量 判断当前系统所处环境
获取系统坏境变量 process.env //返回值为对象
config第三方模块
使用步骤:
1.npm install config
2.项目跟目录下新建config文件夹
3.在config文件夹新建default.json、development.json
4.项目中通过require方法,导入模块
5.使用模块内部提供的get方法获得配置信息
作用:模块内部自动判断当前应用的运行环境,并读取对应的配置信息
开发环境
问:在开发环境中,将客户端放到服务器端的请求信息打印到控制台上
答:
引入morgan 第三方模块
app.use(morgan('dev')) //'dev'必传参数
生产环境
模板文件 外链资源要写 绝对路径 /
模板文件中相同样式 抽离样式组成新模板.art
引用模板 {{include './相对路径'}}
模板文件中相同骨架(head部分,外链引用js,css) 抽离 组成新模板
继承模板 {{extend ./相对路径}} 继承时也要调用坑,告诉不同的这方面放在哪里 {{block ' 坑名'}}不同的内容{{/block}}
注意:本身页面也存在自身的css和js或主体,组成新模板的时候需要使用 {{block ' 坑名'}}{{/block}}
数据分页 moogoose-sex-page
引入模块
方法 变量名(集合构造函数).page().size().display().exec()
page 指定当前页
size 指定每页显示的数据条数
display 指定客户端要显示的页码数量
exec 向数据库中发送查询请求
enctype 指定表单数据的编码类型
默认为 application/x-www-form-urlencoded
multipart/form-data 将表单数据编码为二进制类型
接收二进制数据
formidable 第三方模块 接收客户端传过来的数据
创建表单对象 new formidable.IncomingForm()
解析表单
parse方法
参数
err 错误对象
fields 保存普通表单数据
files 对象类型 保存上传文件相关的数据
格式化时间 dateFormat第三方模块
用法:dateFormat(要格式的时间,'格式')
文件读取 FileReader
创建文件读取对象 new FireReader
获取用户选择的列表 this.files
读取文件 readAsDataURL
multiple 允许用户一次性选择多个文件
密码加密问题
引用bcrypt模块 下载相关依赖
bcrypt.genSalt() 生成随机字符串
返回结果为随机字符串 为异步API
默认值为10 数值越大 生成的随机字符串复杂度更高 数值越小,生成的随机字符串复杂度越小
bcrypt.hash(要进行机密的明文或原文,随机字符串)
返回结果为加密后的密码 为异步API
对密码进行加密
bcrypt.coompare(明文密码,加密后的密码)
返回值为布尔值 true 对比成功 false 对比失败 为异步API
Cookie
Cookie的数据以域名的形式进行区分
Cookie的数据是有过期时间的,超过时间数据会被浏览器自动删除
Cookie的数据会随着请求自动发送到服务器端
Session
存储形式为对象 将客户端传送过来的数据封装成对象 并在Cookie中返回sessionid
下次客户端访问时携带sessionid进行判断
借助第三方模块实现session功能 express-session
使用方法 app.use(session({ secret: 'secret key' }))
res.redirect('要跳转的页面?携带的信息') 重定向 ?后面跟携带的信息
req.body 接收表单提交的参数
req.query 获取地址栏中的参数
JSON.Stringify(要转换的参数) 将对象数据类型转换为字符串类型
JSON.parse(要转换的参数) 将字符串类型转换为对象数据类型
模板中循环对象
{{each 循环的对象}}
@数据 将数据进行原文输出
规则验证 Joi模块
先指定数据类型
string() 只能是字符串类型
alphanum() 只能是字母字符串或数字字符串
min max
required() 必选
regex() 正则表达式 用于密码验证
email() 必须为电子邮件的格式
valid() 值的选择
Joi.validate({要验证的对象,验证规则})
代码优化
部分方法不想暴露在app.js下面,可以通过抽离的方法,定义模块,暴露方法 再引用
错误信息处理中间件 app.use((err,req,res,next))
查询用户数据的数据总条数
countDocument({查询条件})
登录功能实现
1.创建集合,初始化用户
1.1连接数据库
1.2.创建用户集合
1.3.初始化用户
2.为登陆表单设置请求地址,请求方式以及表单项name属性
处理post请求参数 借助第三方模块 body-parser
调用 bodyparser.urlencoded({ extended: false }) //extended 必填项 一般参数为false
路由接收到post请求参数 进行判断是否为空 空返回提示信息 状态码为400
根据邮箱地址查询用户信息 查找到返回对应信息进行反馈
3.当用户点击登录按钮时,客户端验证用户是否填写了登陆表单
4.如果其中一项没有输入,阻止表单提交
5.服务器端接收请求参数,验证用户是否填写了登陆表单
6.如果其中一项没有输入,为客户端做出响应,阻止程序向下执行
7.根据邮箱地址查询用户信息
8.如果用户不存在,为客户端做出响应,阻止程序向下执行
9.如果用户存在,将用户名和密码进行比对
10.比对成功,用户登录成功
11.比对失败,用户登录失败