博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
express 的中间件
阅读量:83 次
发布时间:2019-02-25

本文共 3508 字,大约阅读时间需要 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/

你可能感兴趣的文章