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

你可能感兴趣的文章
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP、CV 很难入门?IBM 数据科学家带你梳理
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP入门(六)pyltp的介绍与使用
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:从头开始的文本矢量化方法
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>