博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Express的serve-static中间件的使用之五问
阅读量:5238 次
发布时间:2019-06-14

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

问题1:serve-static的setHeaders有什么用?

 

  1.  
    var express = require('express')
  2.  
    var serveStatic = require('serve-static')
  3.  
    //这个中间件也可以通过express.static来引入,第二个参数同样表示的是和serve-static同样的选项
  4.  
    var app = express()
  5.  
    //为一些静态文件设置不同的过期时间,而这个设置通过一个函数也就是setHeaders来完成的
  6.  
    //setHeaders用于设定自定义的响应头,函数签名为:fn(res, path, stat)第一个参数表示response对象,第二个表示路径,第三个表示文件的描述符
  7.  app.use(serveStatic(__dirname +
    '/public', {
  8.  
    maxAge: '1d',
  9.  
    setHeaders: setCustomCacheControl
  10.  }))
  11.  app.listen(
    3000)
  12.  
    function setCustomCacheControl(res, path) {
  13.  
    //通过serve-static的mime对象的lookup方法查看文件的mime类型
  14.  
    if (serveStatic.mime.lookup(path) === 'text/html') {
  15.  
    // Custom Cache-Control for HTML files
  16.  res.setHeader(
    'Cache-Control', 'public, max-age=0')
  17.  }
  18.  }

注意:通过setHeaders可以指定一个函数,这个函数可以对不同的文件使用不同的缓存策略,这个函数的签名是fn(res, path, stat)。在内部可以通过serve-static的mime对象的lookup来判断文件的mime类型,然后选择不同的缓存策略

问题2:如果为静态文件指定了多个目录那么我们如何设置?

 

 

  1.  
    var express = require('express')
  2.  
    var serveStatic = require('serve-static')
  3.  
    var app = express()
  4.  
    //如果为静态文件指定了多个目录那么我们如何设置
  5.  app.use(serveStatic(__dirname +
    '/public-optimized'))
  6.  app.use(serveStatic(__dirname +
    '/public'))
  7.  app.listen(
    3000)

注意:这时候我们就会首先查找public-optimized目录,然后查找public目录

问题3:默认情况下访问会发送index.html,那么如何取消这种默认行为?

 

 

  1.  
    var express = require('express')
  2.  
    var serveStatic = require('serve-static')
  3.  
    var app = express()
  4.  
    //其中对于index参数来说:如果访问一个目录那么默认会发送index.html,但是我们可以把index设置为false或者我们给这个参数发送一个
  5.  
    //数组(或者string),那么就会按照数组指定的顺序进行遍历,前面的优先级高于后者!
  6.  app.use(serveStatic(
    'public/ftp', {
    'index': ['default.html', 'default.htm']}))
  7.  app.listen(
    3000)

注意:通过制定index参数就可以取消这种默认行为

问题4:如果指定静态文件没有找到,是否可以继续查找其他后缀的文件作为备用文件?

 

 

  1.  
    var express = require('express')
  2.  
    var serveStatic = require('serve-static')
  3.  
    var app = express()
  4.  
    //其中对于index参数来说:如果访问一个目录那么默认会发送index.html,但是我们可以把index设置为false或者我们给这个参数发送一个
  5.  
    //数组(或者string),那么就会按照数组指定的顺序进行遍历,前面的优先级高于后者!
  6.  app.use(serveStatic(
    'public/ftp', {
    'extensions': ['html', 'htm']}))
  7.  app.listen(
    3000)

 

Extensions如果指定了true,那么指定的文件如果没有被找到,那么就会把指定的数组中的后缀添加进去继续查找,然后返回。如:['html', 'htm'],默认是false。如果我如下指定了静态文件的目录:

 

app.use(express.static(path.join(__dirname, 'public')));

那么如果在静态文件中有这样的引用:

 

 

那么就会查找public/stylesheets/style.css来获取文件。extensions我觉得可以用于如果没有找到jpg图片继续查找png图片的情况下,如['jpg','png']

问题5:fallthrough参数有什么用?
  让有客户端错误的请求通过就像没有这个请求一样,或者也可以产生一个客户端的错误。如果把这个参数设置为true那么那些无效的客户端请求或者404请求就会简单的调用next()来触发下一个中间件,如果设置为false那么就会触发next(err)把错误消息传递给下一个中间件。一般情况下都是true,这时候我们可以把多个物理路径映射到,当前面一个路径查询不到资源继续转换到下一个物理路径查找(这里是静态资源的查找)。如果你确定你只有一个路径来存放物理资源那么设置为false。这个中间件会处理所有的GET/POST/DELETE等请求,默认情况下为!

 

文章出处:

 

转载于:https://www.cnblogs.com/ljbkyBlog/p/9327356.html

你可能感兴趣的文章
python习题:unittest参数化-数据从文件或excel中读取
查看>>
Android控件之GridView探究
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
snmpwalk命令常用方法总结
查看>>
网站产品设计
查看>>
C++按格式接收输入字符(京东,滴滴,360笔试必用)
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
Java IO流学习总结
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
递归函数,二分运算,正则表达式
查看>>
Flutter之内置动画(转)
查看>>
MySql优化相关概念的理解笔记
查看>>
数据库解决方案
查看>>
DataContract和DataMember的作用
查看>>
js如何获取response header信息
查看>>