nodejs中间件笔记

=====

gm 图片处理工具

link
先读取(gm)图片后,可以先进行拼接(mosaic, compose, append),然后裁剪(crop),放缩(resize)到指定大小后,最后才保存(write)下来

formidable 模块

是一个用于处理文件、图片、视频等数据上传的模块,支持GB级上传数据处理,支持多种客户端数据提交。有极高的测试覆盖率,非常适合在生产环境中使用。
link

connect-history-api-fallback

解决react前端直接在浏览器输入地址访问报404错误的问题 link

express-winston winston 日志

Node.js最流行的日志框架之一,设计为一个简单通用的日志库,

express-session

session/cookie对比 link
中间件将会话数据存储在服务器上;它仅将会话标识(而非会话数据)保存在 cookie 中。
从1.5.0版本开始, express-session不再依赖cookie-parser,直接通过req/res读取/写入;默认存储位置内存存储(服务器端),

cookieParser 签名与解析

cookie设置与解析,cookie签名与解析,实现
link

config-lite 自动获取config

自动获取config不同环境下配置文件使用 https://segmentfault.com/a/1190000010099383

captchang 验证码

模块实现图片验证码 https://www.cnblogs.com/fangdong/p/6853124.html

bluebird 异步promise

一种更为优雅的Promise异步使用方式,还有async await

pm2 node进程管理工具

link
link

pm2 start 基本启动命令
pm2 show (appname|id) 查看详细状态信息
pm2 list 查看所有启动的进程列表
pm2 monit 监控每个 node 进程的 cpu 和内存使用情况
pm2 logs 显示所有进程的日志信息
pm2 web 监控运行这些进程的机器的状态
pm2 stop (id|all) 停止 指定/所有 进程
pm2 restart (id|all) 重启 指定/所有 进程
pm2 delete (id|all) * 杀死 指定/所有 进程

pm2 start server.js -i (number|max) 负载均衡

npm install -g pm2-web 实现监控可视化

cross-env能跨平台地设置及使用环境变量

大多数情况下,在windows平台下使用类似于: NODE_ENV=production的命令行指令会卡住,windows平台与POSIX在使用命令行时有许多区别(例如在POSIX,使用$ENV_VAR,在windows,使用%ENV_VAR%。。。)
cross-env让这一切变得简单,不同平台使用唯一指令,无需担心跨平台问题

nodemon 热更新工具

解决问题:修改代码后,需要重新启动 Express 应用,所做的修改才能生效。若之后的每次代码修改都要重复这样的操作,势必会影响开发效率,本文将详细介绍Nodemon,它会监测项目中的所有文件,一旦发现文件有改动,Nodemon 会自动重启应用

1
2
3
4
5
6
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon --harmony index.js",
"check": "cross-env NODE_ENV=production nodemon --harmony index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"deploy": "pm2 deploy production"
}

connect-history-api-fallback

单页面应用程序(SPA)通常使用一个web浏览器可以访问的索引文件,比如index.html,然后,在HTML5 History API的帮助下(react-router就是基于History API实现的),借助JavaScript处理应用程序中的导航。当用户单击刷新按钮或直接通过输入地址的方式访问页面时,会出现找不到页面的问题,因为这两种方式都绕开了History API,而我们的请求又找不到后端对应的路由,页面返回404错误。

connect-history-api-fallback中间件很好的解决了这个问题。具体来说,每当出现符合以下条件的请求时,它将把请求定位到你指定的索引文件(默认为/index.html)。
link

express-session connect-mongo

Express Session的使用
node exprss-session 和connect-mongo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let express = require('express');
let session = require('express-session');
let app = new express();
let MongoStore = require('connect-mongo')(session);
app.use(session({
secret:'keyboard cat', //加密字符串也可以写数组
resave:true, //强制保存session 建议设置成false
saveUninitialized:true, //强制保存未初始化的内容
rolling:true, //动态刷新页面cookie存放时间
cookie:{maxAge:10000}, //保存时效
store:new MongoStore({ //将session存进数据库 用来解决负载均衡的问题
url:'mongodb://127.0.0.1:27017/db06',
touchAfter:24*3600 //通过这样做,设置touchAfter:24 * 3600,您在24小时内
//只更新一次会话,不管有多少请求(除了在会话数据上更改某些内容的除外)
})
}))
app.get('/login',(req,res)=>{
req.session.userinfo = 'admin';
res.send('存储成功');
})

Express使用进阶:cookie-parser中间件实现深入剖析
express中cookie的使用和cookie-parser的解读

Express function(req,res,next)

Node.js Express 里常常见到function(req, res, next)

req : request的缩写, 请求的数据Request
对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。
常用req.body.xx来表示POST的xx属性

res: response的缩写, 响应的数据
Response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。
我们常常用res.send() 传送HTTP响应 , res.render()渲染结果页面

next 前往下一个中间件
执行相同路径的下一个方法;

1
2
3
4
5
6
7
8
9
route.get("/a",function(req,res,next){
console.log("a");
next();
})
route.get("/a",function(req,res){
console.log("b");
res.send("a");
})
//a,b

Mongoose

link

chalk

日志中间件

config-lite

config-lite 是一个轻量的读取配置文件的模块。
config-lite 会根据环境变量(NODE_ENV)的不同从当前执行进程目录下的 config 目录加载不同的配置文件。
config-lite 支持 .js、.json、.node、.yml、.yaml 后缀的文件。

Example

config/default.js

1
module.exports = 'default';

config/test.js

1
module.exports = 'test';

config/production.js

1
module.exports = 'production';

====================================

1
2
3
node app

require('config-lite'); //=> 'default'
1
2
3
NODE_ENV=test node app

require('config-lite'); //=> 'test'
1
2
3
NODE_ENV=production node app

require('config-lite'); //=> 'production'

or:

`
NODE_ENV=production node app –host=localhost –port=3000