博客
关于我
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/

你可能感兴趣的文章
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>
MySQL中B+Tree索引原理
查看>>
mysql中cast() 和convert()的用法讲解
查看>>
mysql中datetime与timestamp类型有什么区别
查看>>
MySQL中DQL语言的执行顺序
查看>>
mysql中floor函数的作用是什么?
查看>>
MySQL中group by 与 order by 一起使用排序问题
查看>>
mysql中having的用法
查看>>
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>