node day10随堂笔记
分页核心要素:
- 当前页码:
page
,通过客户端传递参数获取- 不能小于1,如果小于1,则设置为1
- 不能大于
pages
,如果大于,则设置为pages
- 每页数据条数:
size
,根据业务需求,可以通过客户端传参获取,也可以规定死- 不能小于1,如果小于,则设置为默认值,默认值一般为10
- 总页数:
pages
,通过Math.ceil(total / size)
计算获取- 不能小于1,如果小于1,则设置为1
- 总数据条数:
total
,通过数据库查询获取,比如:User.countDocuments({ 查询条件 })
- 跳过多少条数据:通过
(page - 1) * size
计算得到,通过skip((page - 1) * size)
方法指定 - 拿多少条数据:就是
size
,通过limit(size)
方法指定
注意:以后遇到添加和修改操作,都分开搞,这样业务逻辑会清晰很多,也方便后期维护
form表单的enctype属性值说明:
- 默认值:application/x-www-from-urlencoded,将表单数据转换成形如get请求的参数:
name=zs&age=18
- 如果涉及到文件上传:multipart/form-data,将表单数据编码成二进制类型
第三方模块formidable:
-
作用:解析表单数据,支持get请求参数,post请求参数,文件上传
-
当有文件上传时,body-parser无法解析二进制数据,所以就需要借助这个模块了
-
核心代码:
const { IncomingForm } = require('formidable') // 创建表单解析对象 const form = new IncomingForm() // 设置文件上传目录,用绝对路径 form.uploadDir = '/path/to/you/upload/dir' // 是否保留文件的扩展名 form.keepExtensions = true; // 默认false,不保留 // 对表单进行解析 form.parse(req/* 请求对象 */, (err, fields, files) => { // err 错误对象 // fields 普通的请求参数,对象类型 // files 上传的文件信息,对象类型 })
图片预览:
// 获取文件input标签
const fileInput = document.querySelector('#fileInput')
// 获取预览img标签
const previewImg = document.querySelector('#previewImg')
// 监听onchange事件,当用户选择文件后触发
fileInput.onchange = function () {
// 创建文件读取对象
const fileReader = new FileReader()
// 读取文件,将文件转换成base64编码格式的url,这是一个异步函数,不能通过返回值的形式获取到结果
fileReader.readAsDataURL(this.files[0])
// 监听onload事件,当文件读取完后触发
fileReader.onload = () => {
// 将文件编码字符串设置到预览img元素的src属性上去
previewImg.src = fileReader.result
}
}