博客
关于我
express 的中间件
阅读量:88 次
发布时间:2019-02-25

本文共 3471 字,大约阅读时间需要 11 分钟。

static

static 中间件主要用来提供静态资源服务 ,可以设置静态资源的目录 设置响应头 及缓存等等配置,代码如下

function static(root,options = {   }){       let {    dotfiles = "ignore" ,etag=true,lastModified,maxAge=0, setHeaders } = options;    return function(req,req,next){           let {    pathname } = url.parse(req.url,true);        let file = path.join(root,pathname);        let parts = file.split(path.sep);        let isDotFile = parts[parts.length-1][0]==".";        if(isDotFile && dotfiles=="deny"){     //拒绝访问.文件            res.setHeader("Content-Type","text/html");            res.statusCode = 403;            return res.end(http.STATUS_CODES[403]);        }        fs.stat(file,function(error,stat){               if(error){                   next()            }else{                   if(etag){                       res.setHeader("ETag",stat.mtime.toLocaleDateString());                }                if(lastModified){                       res.setHeader("Last-Modified",stat.mtime.toUTCString())                }                if(typeof setHeaders =='function'){                       setHeaders(req,req,function(params){                           console.log(params);                    });                }                res.setHeader("Cache-Control",`max-age=${     maxAge}`);                res.setHeader("Content-Type",mime.getType(file))                 fs.createReadStream(file).pipe(res);            }        })    }};

bodyParser

bodyParser 中间件用来解析请求参数

json

function json(options){       return function(req,res,next){           let contentType = req.headers["content-type"];        if(contentType=="application/json"){               const buffer = [];            req.on("data",function(data){                   buffer.push(data);            });            req.on("end",function(){                   let result = buffer.toString();                req.body = JSON.parse(result);                next()            })        }else{               next();        }    }}

urlencoded

function urlencoded(options){       let {    extended } = options;    return function(req,res,next){           let contentType = req.headers["content-type"];        console.log(contentType);        if(contentType=="application/x-www-form-urlencoded"){               const buffer = [];            req.on("data",function(data){                   buffer.push(data);            });            req.on("end",function(){                   let result = buffer.toString();                if(extended){                       //qs 可以支持嵌套对象;                    req.body = qs.parse(result);                }else{                       req.body = querystring.parse(result);                }                next();            })        }else{               next();        }    }}

text

function text(options){       return function(req,res,next){           const contentType = type.parse(req.headers["content-type"]);        const charset =  contentType.parameters.charset;        const cType = contentType.type;        if(cType=="text/plain"){               const buffer = [];            req.on("data",function(data){                   buffer.push(data);            });            req.on("end",function(){                   let r = Buffer.concat(buffer);                if(charset=="gbk"){                       req.body =  iconv.decode(r,charset);                }else{                       req.body = buffer.toString();                }                next()            })        }else{               next();        }    }}

转载地址:http://tld.baihongyu.com/

你可能感兴趣的文章
nginx中配置root和alias的区别
查看>>
nginx主要流程(未完成)
查看>>
Nginx之二:nginx.conf简单配置(参数详解)
查看>>
Nginx从入门到精通
查看>>
Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
查看>>
Nginx代理初探
查看>>
nginx代理地图服务--离线部署地图服务(地图数据篇.4)
查看>>
Nginx代理外网映射
查看>>
Nginx代理模式下 log-format 获取客户端真实IP
查看>>
Nginx代理解决跨域问题(导致图片只能预览不能下载)
查看>>
Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH
查看>>
Nginx代理配置详解
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
nginx优化日志拒绝特定404请求写入
查看>>
Nginx使用proxy_cache指令设置反向代理缓存静态资源
查看>>
Nginx做反向代理时访问端口被自动去除
查看>>
Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例
查看>>
nginx反向代理
查看>>
Nginx反向代理
查看>>