1.nodemon–自动更新命令行
ctrl+s 后自动更新命令行
npm install nodemon -g
2.nrm–下载地址切换工具
下载地址切换工具
npm install nrm -g
3.gulp–代码处理
html css js压缩 es6语法切换,less转换 公共文件抽离
//下载gulp模块
npm install gulp
//全局下载gulp命令工具
npm install gulp-cli -g
//引入第三方模块gulp
const gulp = require('gulp');
gulp中的插件 (需在npm中下载再引用)
//html文件压缩
const htmlmin = require('gulp-htmlmin');
//抽取公共代码
const fileinclude = require('gulp-file-include');
//less语法转换
const less = require('gulp-less');
//css文件压缩
const csso = require('gulp-csso');
//js语法转换
const babel = require('gulp-babel');
//压缩javascript
const uglify = require('gulp-uglify');
//gulp.task() // 建立gulp任务
//gulp.src() // 获取任务要处理的文件
//gulp.dest() // 输出文件
//.pipe() // 处理
gulp.task('xxx', () => {
gulp.src('./src/*.html')
.pipe(fileinclude())
// 压缩html文件中的代码
.pipe(htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('dist'));
});
4.mime–返回资源类型
根据请求分析资源类型,把类型返回
npm install mime
const mime = require('mime');
5.mongoose–操作数据库
操作数据库
npm install mongoose
// 引入mongoose第三方模块 用来操作数据库
const mongoose = require('mongoose');
eg:数据库操作
// 引入mongoose第三方模块 用来操作数据库
const mongoose = require('mongoose');
// 数据库连接
mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true})
// 连接成功
.then(() => console.log('数据库连接成功'))
// 连接失败
.catch(err => console.log(err, '数据库连接失败'));
// 创建集合规则
const courseSchema = new mongoose.Schema({
name: String,
author: String,
isPublished: Boolean
});
// 使用规则创建集合// 1.集合名称// 2.集合规则
const Course = mongoose.model('Course', courseSchema) // courses
// 向集合中插入文档
Course.create({name: 'Javascript123', author: '黑马讲师', isPublished: false})
.then(result => console.log(result))
6.art-template–模板引擎拼接字符串
让开发者以更加友好的方式拼接字符串,使项目代码更加清晰、更加易于维护
npm install art-template
const template = require('art-template');
//art-template同时支持两种模板语法:标准语法和原始语法。
//标准语法: {{ 数据 }} 可以让模板更容易读写
//原始语法:<%=数据 %> 具有强大的逻辑处理能力
7.dateFormat–修改日期格式
修改日期格式
npm install dateformat
const dateFormat = require('dateformat');
8.serve-static–静态资源访问
静态资源访问模块
npm install serve-static
// 引入静态资源访问模块
const serveStatic = require('serve-static');
// 实现静态资源访问服务
const serve = serveStatic(path.join(__dirname, 'public'))
9.router–路由模块
路由模块
npm install router
// 引入router模块
const getRouter = require('router');
// 获取路由对象
const router = getRouter();
//get
router.get('/add', (req, res) => {
let html = template('index.art', {});
res.end(html);
})
//post
router.post('/add', (req, res) => {
}
10.Express框架
- 提供了方便简洁的路由定义方式
- 对获取HTTP请求参数进行了简化处理
- 对模板引擎支持程度高,方便渲染动态HTML页面
- 提供了中间件机制,有效控制HTTP请求
- 拥有大量第三方中间件对功能拓展
npm install express
// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();
app.get();
app.post();
app.use();// 接收所有请求的中间件
// res.send()
// 1. send方法内部会检测响应内容的类型
// 2. send方法会自动设置http状态码
// 3. send方法会帮我们自动设置响应的内容类型及编码
app.use('/static',express.static(path.join(__dirname, 'public'))); //获取静态资源--express.static();实现静态访问功能
req.query //获取get参数,框架内部将其转为对象格式再返回
req.body //获取post参数,需下载第三方模块body-parser
express.Router(); //创建页面路由
express.redirect(); //重定向
11.body-parser--获取post参数(Express下)
获取post参数
//获取post参数,对象格式
npm install body-parser
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));//阻止所有请求 extended: false->不使用第三方模块解析,直接使用当前
req.body //获取post参数,框架内部将其转为对象格式再返回
12.express-art-template–模板引擎(Express下)
express下模板引擎
npm install art-template express-art-template //需同时下载两个
// 告诉express框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
// 告诉express框架模板的默认后缀是什么
app.set('view engine', 'art');
// 当渲染后缀为art的模板时 所使用的模板引擎是什么
app.engine('art', require('express-art-template'));
13.bcrypt–密码加密
密码加密
npm install bcrypt //(管理员安装)
// 导入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(明文密码, 加密密码);
bcrypt 依赖的其他环境
//1. python 2.x 需配置环境变量
//2. node-gyp
npm install -g node-gyp
//3. windows-build-tools (管理员安装)
npm install --global --production windows-build-tools
14.express-session–把数据存储在服务器端(Express下)
npm install express-session
//引入express模块
const session = require('express-session'); //在node中使用express-session模块实现session功能
app.use(session({secret: 'secret key'})); //配置session
15.joi–最强大的JavaScript 模式描述语言和数据验证器
//引入joi模块
const Joi = require('joi')
module.exports = async(req, res) => {
//定义对象的验证规则
const schema = Joi.object({
username: Joi.string().min(2).max(10).required().error(new Error('用户名不符合规则')),
email: Joi.string().email().required().error(new Error('邮箱格式不符合要求')),
password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码不符合规则')),
role: Joi.string().valid('normal', 'admin').required().error(new Error('角色值不符合规则')),
state: Joi.number().valid(0, 1).required().error(new Error('状态值不符合规则'))
})
//用try{}catch(){}语句来捕获异步函数的异常
try {
//实施验证
await schema.validateAsync(req.body)
} catch (e) {
//验证没有通过
//e.message
//重定向回用户添加页面
res.redirect(`/admin/user-edit?${e.message}`)
}
}
16.formidable–文件上传功能
npm install formidable
// 引入formidable第三方模块
const formidable = require('formidable');
const path = require('path');
module.exports = (req, res) => {
const form = formidable({
multiples: true,
//保留上传文件的后缀
keepExtensions: true,
//配置上传文件的存放位置
uploadDir: path.join(__dirname, '../', '../', 'public', 'uploads')
});
// 4.解析表单
form.parse(req, (err, fields, files) => {
// 1.err错误对象 如果表单解析失败 err里面存储错误信息 如果表单解析成功 err将会是null
// 2.fields 对象类型 保存普通表单数据
// 3.files 对象类型 保存了和上传文件相关的数据
// res.send(files.cover.path.split('public')[1])
res.send(files)
});
// res.send('ok');
}
//文件上传提交表单时,表单数据必须以二进制方式上传
//enctype 指定表单数据的编码类型
默认值: enctype="application/x-www-form-urlencoded" //name=zhangsan&age=20
二进制: enctype="multipart/form-data"