|
| 1 | +# Express框架前端静态资源托管服务演示Demo |
| 2 | + |
| 3 | +Express框架不仅给出了前后端混合开发的解决方案,针对不同的业务场景的需要,也可以灵活运用: |
| 4 | + |
| 5 | +- 只提供服务端接口,用做纯后端应用,开发restFul接口,舍弃掉模板引擎渲染前端页面。 |
| 6 | +- 提供静态资源托管服务,将前端需要使用的到图片、视频、js代码、css代码等托管起来,提供外部资源调用地址 |
| 7 | + |
| 8 | +## 简单介绍 |
| 9 | + |
| 10 | +使用`express.static` 内置中间件函数,可以将指定的文件目录设置成静态资源托管目录,函数的格式如下: |
| 11 | + |
| 12 | +`express.static(root, [options])` |
| 13 | + |
| 14 | +- root:必选参数, 静态资源目录地址,字符串类型 |
| 15 | +- options:可选参数,设置资源的一些属性,具体可以参考[API类型](https://www.expressjs.com.cn/4x/api.html#express.static) |
| 16 | + |
| 17 | +创建`static-source-demo`项目,用来演示Express托管静态资源文件。在根目录下创建`app.js`,可以简单的使用static中间件函数,将根目录下的public目录设置成 |
| 18 | +静态资源托管的根目录,注意:**这里的public是相对路径** |
| 19 | + |
| 20 | +```js |
| 21 | +const express = require('express') |
| 22 | +const app = express() |
| 23 | +// 服务启动端口 |
| 24 | +const port = 3000 |
| 25 | + |
| 26 | +app.use(express.static('public')) |
| 27 | + |
| 28 | +app.listen(port, () => { |
| 29 | + console.log(`quick-start app listening on port ${port}`) |
| 30 | +}) |
| 31 | +``` |
| 32 | + |
| 33 | +## 使用 |
| 34 | + |
| 35 | +### 根目录的设置 |
| 36 | + |
| 37 | +使用相对路径设置 |
| 38 | + |
| 39 | +```js |
| 40 | +// 设置静态资源托管的根目录 |
| 41 | +app.use(express.static('public')) |
| 42 | +``` |
| 43 | + |
| 44 | +使用绝对路径设置 |
| 45 | + |
| 46 | +```js |
| 47 | +const path = require('path') |
| 48 | +// 设置静态资源托管的根目录 |
| 49 | +express.static(path.join(__dirname, 'public')) |
| 50 | +``` |
| 51 | + |
| 52 | +### 设置多个目录 |
| 53 | + |
| 54 | +支持对多个目录的设置,提供静态资源托管服务 |
| 55 | + |
| 56 | +```js |
| 57 | +// 分类托管视频文件 |
| 58 | +app.use(express.static('video')) |
| 59 | + |
| 60 | +// 分类托管图片文件 |
| 61 | +app.use(express.static('images')) |
| 62 | +``` |
| 63 | + |
| 64 | +### 资源的访问 |
| 65 | + |
| 66 | +express.static中间件函数,实质上返回的是一个请求处理器。当客户端发起请求后,分析请求路径,将命中的请求路径分发到不同的静态资源托管的根目录 |
| 67 | + |
| 68 | +所以,在使用过程中只是声明了托管资源的根目录是无效的,还需要指定该目录对应的访问路由,例如: |
| 69 | + |
| 70 | +```js |
| 71 | +app.use('/static', express.static('public')) |
| 72 | +``` |
| 73 | + |
| 74 | +服务启动后,在浏览器中访问: |
| 75 | + |
| 76 | +```js |
| 77 | +http://localhost:3000/static/css/style.css |
| 78 | +http://localhost:3000/static/js/app.js |
| 79 | +http://localhost:3000/static/images/bg.png |
| 80 | +http://localhost:3000/static/hello.html |
| 81 | +``` |
| 82 | + |
| 83 | +文件存在时,返回渲染出文件内容: |
| 84 | + |
| 85 | + |
| 86 | + |
| 87 | +文件不存在时,提供文件不存在: |
| 88 | + |
| 89 | + |
| 90 | + |
| 91 | +至此,可以使用Express框架来更加方便的管理静态资源文件,给资源做托管了... |
| 92 | + |
| 93 | +但是,这种做法已经是非常过时的,不推荐使用。使用静态资源托管更多的是推荐使用CDN服务,相比而言访问迅速、稳定性高,很多CDN服务厂商都提供了资源文件的管理后台,使用起来非常方便 |
| 94 | + |
| 95 | +**对于了解Express框架,学习、使用一些API还是非常推荐的** |
| 96 | + |
| 97 | +## 参考 |
| 98 | + |
| 99 | +- <https://www.expressjs.com.cn/starter/static-files.html> |
0 commit comments