Node.js中的第三方模块

248 阅读5分钟

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 模式描述语言和数据验证器

npm install joi
//引入joi模块
//引入joi模块
const Joi=require('joi')
module.exports=async(req,res)=>{
   //定义对象的验证规则
   const schema=Joi.object({
       username:Joi.string().min(2).max(12).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"