node常用第三方模块
dateformat
时间格式化模块
安装:npm install dateformat
使用格式:dateFormat(时间戳,格式)
例如:
dateFormat(Date.now(),'yyyy-mm-dd') //返回2020-3-20
第三方模块 router
功能:实现路由
使用步骤:
-
获取路由对象
-
调用路由对象提供的方法创建路由
-
启用路由,使路由生效
const getRouter = require('router')
const router = getRouter();
router.get('/add', (req, res) => {
res.end('Hello World!')
})
server.on('request', (req, res) => {
router(req, res, () => {})
})
说明:第三个回调函数必须写,否则报错,处理完请求会调用
第三方模块 serve-static
功能:实现静态资源访问服务
步骤:
1.引入serve-static模块获取创建静态资源服务功能的方法
2.调用方法创建静态资源服务并指定静态资源服务目录
3.启用静态资源服务功能
const serveStatic = require('serve-static')
const serve = serveStatic('public')
server.on('request', () => {
serve(req, res, () => {})
})
server.listen(3000)
说明:第三个回调函数必须写,否则报错,处理完请求会调用
密码加密 bcrypt
哈希加密是单程加密方式:1234 => abcd
在加密的密码中加入随机字符串可以增加密码被破解的难度。
// 导入bcrypt模块
const bcrypt = require('bcrypt');
// 生成随机字符串 gen => generate 生成 salt 盐
let salt = await bcrypt.genSalt(10);
// 使用随机字符串对密码进行加密
let pass = await bcrypt.hash('明文密码', salt);
// 密码比对
let isEqual = await bcrypt.compare('明文密码', '加密密码');
genSalt方法接收一个数值作为参数
数值越大生成的随机字符串复杂度越高
数值越小生成的随机字符串复杂度越低
默认值是10
bcrypt依赖的其他环境
-
python 2.x
-
node-gyp
npm install -g node-gyp
-
windows-build-tools
npm install --global --production windows-build-tools
Joi
JavaScript对象的规则描述语言和验证器。
const Joi = require('joi');
const schema = {
username: Joi.string().alphanum().min(3).max(30).required().error(new Error(‘错误信息’)),
password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
access_token: [Joi.string(), Joi.number()],
birthyear: Joi.number().integer().min(1900).max(2013),
email: Joi.string().email()
};
Joi.validate({ username: 'abc', birthyear: 1994 }, schema);
说明:validate方法返回Promise对象,不匹配则抛出异常,里面包含错误信息
formidable
作用:解析表单,支持get请求参数,post请求参数、文件上传。
// 引入formidable模块
const formidable = require('formidable');
// 创建表单解析对象
const form = new formidable.IncomingForm();
// 设置文件上传路径
form.uploadDir = "/my/dir";
// 是否保留表单上传文件的扩展名,默认为false
form.keepExtensions = false;
// 对表单进行解析
form.parse(req, (err, fields, files) => {
// fields 存储普通请求参数
// files 存储上传的文件信息
});
说明:
- err错误对象 如果表单解析失败 err里面存储错误信息 如果表单解析成功 err将会是null
- fields 对象类型 保存普通表单数据
- files 对象类型 保存了和上传文件相关的数据
数据分页 mongoose-sex-page
const pagination = require('mongoose-sex-page');
pagination(集合构造函数).find().page(1).size(20).display(8).exec();
说明:
page 指定当前页
suze 指定每页显示的数据条数
display 指定客户端要显示的页码数量
exec 向数据库中发送查询请求
{
"page": 1, //当前页
"size": 2, //每页显示数据条数
"total": 4, //总共的数据条数
"records": [
//查询出来的具体数据
{
"_id": "5e7db3a18e9cfb378c21cb97",
"title": "Test title!"
}
],
"pages": 2, //总共的页数
"display": [1,2] //客户端显示的页码
}