案例初始化准备
npm init -y生成package.json文件。
node.js安装node modules
node_modules是安装node后用来存放用包管理工具下载安装的包的文件夹。比如webpack、gulp、grunt这些工具。在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块。
模板中外链的相对路径,相对的是地址栏中的请求路径的。请求路径可能会变来变去,不安全,模板文件中用绝对路径改成相对路径,用 / 即可
解决方式是,把相对路径改成绝对路径
**{{include ‘./common/header.art’}}**调用模板可以用相对路径,因为是模板引擎解析的,上部分讲的外链必须用绝对路径,是因为是浏览器解析的。
项目功能实现
- 登陆
要获取post从客户端请求的参数用第三方模块,body-parser。
{{extend ‘./common/layout.art’}}
art-template可以方便服务器展示页面给客户端的东西
属于子模版
D
新增用户功能分析
Joi
JavaScript对象的规则描述语言和验证器。
SyntaxError: Unexpected identifer错误
//1 引入joi模块
const Joi = require('joi');
//2 定义对象的验证规则
const schema = {
//required方法的作用为是对响应的属性变成必填项
username: Joi.string().min(2).max(5).required().error(new Error('username属性没有通过验证')),
birth: Joi.number().min(1900).max(2020).error(new Error('birth没有通过验证'))
};
async function run () {
//异步函数抛出异常的方法为try catch
try {
//3 实施验证 这个方法返回的是一个promiss对象
await Joi.validate({username: 'ad', birth: 1800}, schema);
} catch (ex) {
console.log(ex.message);
return;
}
console.log('验证通过');
}
run();
原文输出
在模板引擎中,如果要使用原文输出,只需在模板中数据的前面加上 @ 符号即可
<td>{{@$value._id}}</td>
数据分页
当数据库中的世俗据非常多时,数据需要分批次显示,这时就需要用到数据分页功能。
分页功能核心要素:
总页数:Math.ceil(总数据条数/每页显示数据条数)
分页功能用到的两个查询方法:
数据开始的位置=(当前页-1)*每页显示的数据条数
注意:分页操作下一页报错,因为减号会自动将page转换为数值,所以改成以下语法:
用户信息修改
用户信息删除
bodyPaser只能接收普通表单传递过来的参数,表单里面的上传文件需要转换成二进制,bodyPaser不能接收二进制参数。
这时需要用到formidable
formidable第三方模板
文件读取 FileReader
javascript中异步方法不能通过返回值的方式获取结果,需要监听事件
数据分页mongoose-sex-page