一、获取第三方模块
npm(node package manager):node的第三方模块管理工具
- 下载:npm install 模块名称
- 卸载:npm uninstall package 模块名称
二、package.json文件
node_modules文件夹以及文件过多过碎,当我们将项目整体拷贝给别人的时候,,传输速度会很慢很慢.
复杂的模块依赖关系需要被记录,确保模块的版本和当前保持一致,否则会导致当前项目运行报错
项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块等。
- 使用
npm init -y
命令生成。 - 生成package.json文件,使用npm install 下载的文件会默认添加到package.json文件中
详情链接:详情链接
三、第三方模块列举
1.nodemon
nodemon是一个命令行工具,用以辅助项目开发。
用node运行,每次修改文件都要在命令行工具中重新执行该文件,nodemon可以在每次js文件保存后,自动重新运行
使用步骤:
- 使用
npm install nodemon -g
下载 - 在命令行工具中用nodemon命令替代node命令执行文件
2.nrm
npm下载地址切换工具
npm默认的下载地址在国外,国内下载速度慢
使用步骤:
- 使用
npm install nrm -g
下载 - 查询可用下载地址列表
nrm ls
- 切换npm下载地址
nrm use 下载地址名称
3.gulp
将机械化操作编写出任务,想要执行机械化操作时执行一个命令行命令任务就能自动执行了
具体插件使用
能做什么:
- 项目上线,HTML,CSS、JS文件压缩合并
- 语法转换(es6、less…)
- 公共文件抽离
- 修改文件浏览器自动刷新
使用步骤:
- 使用
npm install gulp
下载gulp库文件 - 在项目根目录下建立gulpfile.js文件
- 重构项目的文件夹结构 ( src 目录放置源代码文件 , dist 目录放置构建后文件)
- 在gulpfile.js文件中编写任务
- 在命令行工具中编写任务
提供的方法
- gulp.src(): 获取任务要处理的文件
- gulp.dest(): 输出文件
- gulp.task(): 建立gulp任务
- gulp.watch(): 监控文件的变化
代码示例:
const gulp = require('gulp');
//使用gulp.task()方法建立任务
gulp.task('first',()=>{
gulp
.src('./src/css/base.css') //获取要处理的文件
.pipe(gulp.dest('./dist/css')) //将处理后的文件输出到dist目录
})
gulp插件
需要npm install 下载
- gulp-htmlmin :html文件压缩
- gulp-csso :压缩css
- gulp-babel :JavaScript语法转化
- gulp-less: less语法转化
- gulp-uglify :压缩混淆JavaScript
- gulp-file-include 公共文件包含
- browsersync 浏览器实时同步
4.Mongoose
使用Node.js操作MongoDB数据库需要依赖
- 使用
npm install mongoose
命令下载 - 在命令行工具中运行
net start mongoDB
即可启动MongoDB
5.art-template模板引擎
使用步骤:
- 在命令行工具中使用
npm install art-template
下载 - 使用const template = require(‘art-template’)引入模板引擎
- 告诉模板引擎要拼接的数据和模板在哪 const html = template(‘模板路径’, 数据);
- 使用模板语法告诉模板引擎,模板与数据应该如何进行拼接
模板语法
-
art-template同时支持两种模板语法:标准语法和原始语法。
-
标准语法可以让模板更容易读写,原始语法具有强大的逻辑处理能力。
-
标准语法: {{ 数据 }}
-
原始语法:<%=数据 %>
原文输出
如果数据中携带HTML标签,默认模板引擎不会解析标签,会将其转义后输出。
- 标准语法:{{@ 数据 }}
- 原始语法:<%-数据 %>
<!-- 标准语法 -->
<h2>{{@ value }}</h2>
<!-- 原始语法 -->
<h2><%- value %></h2>
条件判断
<!-- 标准语法 -->
{{if 条件}} ... {{/if}}
{{if v1}} ... {{else if v2}} ... {{/if}}
<!-- 原始语法 -->
<% if (value) { %> ... <% } %>
<% if (v1) { %> ... <% } else if (v2) { %> ... <% } %>
循环
- 标准语法:{{each 数据}} {{/each}}
-原始语法:<% for() { %> <% } %>
<!-- 标准语法 -->
{{each target}}
{{$index}} {{$value}}
{{/each}}
<!-- 原始语法 -->
<% for(var i = 0; i < target.length; i++){ %>
<%= i %> <%= target[i] %>
<% } %>
子模版
- 标准语法:{{include ‘模板’}}
- 原始语法:<%include(‘模板’) %>
<!-- 标准语法 -->
{{include './header.art'}}
<!-- 原始语法 -->
<% include('./header.art') %>
代码示例:
// 导入模板引擎模块
const template = require('art-template');
// 将特定模板与特定数据进行拼接
const html = template('./views/index.art',{
data: {
name: '张三',
age: 20
}
});
<div>
<span>{{data.name}}</span>
<span>{{data.age}}</span>
</div>
6.express-art-template模板引擎
为了使art-template模板引擎能够更好的和Express框架配合,模板引擎官方在原art-template模板引擎的基础上封装了express-art-template。
- 使用
npm install express-art-template
命令进行安装。
// 当渲染后缀为art的模板时 使用express-art-template
app.engine('art', require('express-art-template'));
// 设置模板存放目录
app.set('views', path.join(__dirname, 'views'));
// 渲染模板时不写后缀 默认拼接art后缀
app.set('view engine', 'art');
app.get('/', (req, res) => {
// 渲染模板
res.render('index');
});
7 .formidable
作用:解析表单,支持get请求参数、post请求参数、文件上传。
//引入formidable模块
const formidable = require('formidable');
//创建表单解析对象
const form = new formidable.IncomingForm();
//设置文件上传路径
form.uploadDir = '/my/dir';
//是否保留表单上传文件的扩展名
form.keepExtensions = true;
//对表单进行解析
form.parse(req,(err,fields,files)=>{
//fields 存储普通请求参数
//files 存储上传的文件信息
});
8.router
实现路由
- 使用
npm install 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)
})
9.serve-static
功能:实现静态资源访问服务
使用步骤
- 使用
npm install serve-static
下载 - 引入serve-static模块获取创建静态资源服务功能的方法
- 调用方法创建静态资源服务并指定静态资源服务目录
- 启用静态资源服务功能
const serveStatic = require('serve-static')
const serve = serveStatic('public')
server.on('request', () => {
serve(req, res)
})
server.listen(3000)
10.express框架
Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用。
- 使用
npm install express
命令下载
特性
- 提供了方便简洁的路由定义方式
- 对获取HTTP请求参数进行了简化处理
- 对模板引擎支持程度高,方便渲染动态HTML页面
- 提供了中间件机制有效控制HTTP请求
- 拥有大量第三方中间件对功能进行扩展
// 引入Express框架
const express = require('express');
// 使用框架创建web服务器
const app = express();
// 当客户端以get方式访问/路由时
app.get('/', (req, res) => {
// 对客户端做出响应 send方法会根据内容的类型自动设置请求头
res.send('Hello Express'); // <h2>Hello Express</h2> {say: 'hello'}
});
// 程序监听3000端口
app.listen(3000);
11.body-parser
功能:接收post请求参数
// 引入body-parser模块
const bodyParser = require('body-parser');
// 配置body-parser模块
app.use(bodyParser.urlencoded({ extended: false }));
// 接收请求
app.post('/add', (req, res) => {
// 接收请求参数
console.log(req.body);
})
12.config
作用:允许开发人员将不同运行环境下的应用配置信息抽离到单独的文件中,模块内部自动判断当前应用的运行环境,
并读取对应的配置信息,极大提供应用配置信息的维护成本,避免了当运行环境重复的多次切换时,手动到项目代码
中修改配置信息
使用步骤
- 使用
npm install config
下载模板 - 在项目的根目录下新建config文件夹
- 在config文件夹下面新建default.json、development.json、production.json文件
- 在项目中通过require方法,将模块进行导入
- 使用模块内部提供的get方法获取配置信息
13.密码加密 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('明文密码', '加密密码');
14.Joi
JavaScript对象的规则描述语言和验证器
//示例代码:
const Joi = require('joi');
const schema = {
username:Joi.string().alphanum().min(3).max(30).reuqired().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(2021),
email:Joi.string().email()
};
//验证
Joi.validate({ username:'abc', birthyear:1994 },schema);
解释:错误解释
15.express-session
在node.js中需要借助express-session实现session功能
const session = require('express-session');
app.use(session({ secret: 'secret key' }));
16. dateformat
作用:处理时间格式
- 使用
npm install dateformat
下载
// 导入
const dateFormat = require("dateformat");
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
// Saturday, June 9th, 2020, 5:46:21 PM
dateFormat(now,'yyyy-mm-dd')
//2021-04-26
17.mongoose-sex-page数据分页
- 使用
npm install mongoose-sex-page
下载
const pagination = require('mongoose-sex-page');
// page:指定当前页
// size:指定每页显示的数据条数
// display:指定客户端要显示的页码数量
// exec():向数据库发出查询请求
pagination(集合构造函数).page(1).size(20).display(8).exec();