zoukankan      html  css  js  c++  java
  • Express的serve-static中间件的使用之五问

    问题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')));

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

    <link rel="stylesheet" href="/stylesheets/style.css">

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

    文章出处:https://blog.csdn.net/liangklfang/article/details/51049031

  • 相关阅读:
    hihoCoder #1062 : 最近公共祖先·一
    hihoCoder #1050 : 树中的最长路
    hihoCoder #1049 : 后序遍历
    108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
    107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
    106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树
    105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
    104 Maximum Depth of Binary Tree 二叉树的最大深度
    102 Binary Tree Level Order Traversal 二叉树的层次遍历
    101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  • 原文地址:https://www.cnblogs.com/ljbkyBlog/p/9327356.html
Copyright © 2011-2022 走看看