《Express.js 中静态文件服务的最佳实践》

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

当我们在构建 Web 应用程序时,通常需要提供静态资源文件,例如 JavaScript、CSS 和图像等。Express.js 是一个非常流行的 Node.js 网络应用程序框架,它提供了一个方便的中间件来服务静态文件。但是,有时候我们需要更多的控制和安全性,让我们来看看在 Express.js 中静态文件服务的最佳实践。

Express.js 默认的静态文件服务

在 Express.js 中,我们可以使用 express.static 中间件来提供静态文件服务。默认情况下,它会将静态文件放置在项目根目录下的 public 文件夹中,并将其暴露在应用程序的根路径下。例如,我们可以将 index.html 文件放在 public 文件夹中,通过以下代码访问它:

----- ------- - -------------------
----- --- - ----------

----------------------------------

---------------- -- -- -
    ------------------- -- ------- -- ---- -------
---

当我们访问 http://localhost:3000/index.html 时,Express.js 会自动将其服务出来。这是一种方便的方式,适用于大多数情况。但是,在某些情况下,我们需要更多的控制。

指定静态资源路径

默认情况下,Express.js 会将静态文件的根目录设置为应用程序根目录的 public 文件夹,但是有时候我们需要将其设置为其他目录。例如,我们可以将 public 目录移动到 assets 目录中,并将其暴露在应用程序的 /static 路径下:

------------------ --------------------------

这里我们使用 app.use 而不是 app.get,这是因为 /static 下的任何资源都可以通过 HTTP GET 请求访问。例如,我们可以在 assets 目录中创建 js/app.js 文件,并通过访问 http://localhost:3000/static/js/app.js 来访问它。

添加缓存控制

当我们访问静态文件时,常常需要添加缓存控制,以减轻服务器负载。Express.js 的 express.static 中间件提供了一个 maxAge 选项来设置缓存时间。例如,我们可以将静态资源的缓存时间设置为一天:

-------------------------------- - ------- ---- ----

这意味着浏览器会缓存静态资源,并在 24 小时内再次访问它时不会向服务器发送请求。当然,如果我们需要更细粒度的控制,可以使用其他的缓存技术,例如 Redis 或 Memcached。

使用 HTTPS 协议服务静态资源

由于 HTTPS 协议提供了更好的安全性,推荐我们使用它来服务静态资源。在 Express.js 中,我们可以使用 express-sslify 中间件来强制使用 HTTPS 协议。例如,我们可以将静态资源的根目录设置为 public 文件夹,并在其中添加一张名为 logo.png 的图片:

----- --- - --------------------------
----- -- - --------------

------------------- ----------------- ---- ----

----------------------------------

------------ ----- ---- -- -
    ----- ---- - ------------------------------------ ---------
    ---------------
---

---------------- -- -- -
    ------------------- -- ------- -- ---- -------
---

注意,我们将 ssl.HTTPStrustProtoHeader 选项设置为 true。这是因为我们的应用程序可能在另一个服务器后面运行(例如,我们可能使用了 Heroku 等云平台),并且当访问时,协议和端口可能已经被代理。因此,我们需要告诉 express-sslify 使用正确的协议。

结论

在 Express.js 中服务静态资源是非常容易和方便的,但是这里介绍的最佳实践可以让我们更好地控制和维护我们的应用程序。我们可以指定静态资源路径、添加缓存控制、使用 HTTPS 协议等。不同的应用程序可能需要不同的配置,我们需要根据应用程序的需要选择最佳实践。

示例代码

完整的示例代码可以访问我的 GitHub 仓库:https://github.com/stigmatazh/express-static-files-example

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6727f2b92e7021665e1ea067


猜你喜欢

  • Mongoose 中使用存储过程的方法

    在Mongoose中,我们可以使用存储过程来让查询更加高效。存储过程是一种预先编写好的数据库操作程序,可以接受参数并返回结果集。本文将介绍如何在Mongoose中使用存储过程来提高查询效率。

    7 天前
  • ES9 之 Object.values() 方法详解

    ES9 新增了许多有用的功能和方法,其中之一就是 Object.values() 方法。Object.values() 方法是一个非常实用的方法,可以方便地获取对象的属性值。

    7 天前
  • 如何使用 PM2 实现 Node.js 应用的进程间通信

    前言 当我们开发 Node.js 应用时,经常会有需要多个进程共同工作的情况,比如多个进程同时部署在不同的服务器上,或者同一台服务器上运行多个进程。此时,进程间通信就是必不可少的。

    7 天前
  • 使用 Yoobee Web Components 创建你的第一个 Web 应用

    作为前端开发者,我们经常需要构建 Web 应用。现在,使用 Yoobee Web Components,我们可以更加轻松地构建 Web 应用,同时提高代码复用性和开发效率。

    7 天前
  • 在Mocha测试中使用Nightwatch.js进行UI测试

    随着Web应用程序的快速增长,UI测试变得越来越重要。在本文中,我们将介绍如何使用Mocha测试框架和Nightwatch.js测试库进行UI测试,以确保您的Web应用程序的前端功能正常运行。

    7 天前
  • ECMAScript 2017 中的全新 Object.entries 方法详解

    随着前端技术的发展,JavaScript 作为前端的主要语言也不断地在更新和完善,其中 ECMAScript 始终是 JavaScript 的重要组成部分,并且在不断更新中。

    7 天前
  • Docker Swarm 存储模式

    Docker Swarm 是一种流行的容器编排工具,可以轻松管理多个 Docker 容器。其中,Docker Swarm 存储模式是一种非常有用的功能,能够使多个容器共享存储卷。

    7 天前
  • Serverless架构与Docker架构对比分析

    随着现代Web应用程序的发展,开发人员正在寻求一种更加灵活和高效的方式来构建和部署应用程序。Serverless(无服务器)架构和Docker容器化技术是两种非常流行和受欢迎的架构,并各有其优缺点。

    7 天前
  • Webpack 打包时 Jsonp Function 未定义问题解决方案

    在使用 Webpack 打包前端应用时,经常会遇到 Jsonp Function 未定义的错误,这个问题很常见,但是也很容易解决,本文将帮助你深入理解这个问题并提供可行的解决方案。

    7 天前
  • Enzyme 中使用 simulate 方法模拟事件并测试响应

    前言 在前端开发中,测试是必不可少的一环。而在测试过程中,模拟事件是非常重要的。Enzyme 是 React 的一个测试辅助库,它提供了 simulate 方法用于模拟各种事件。

    7 天前
  • Mongoose 中使用 TTL 索引

    在 MongoDB 中,可以使用 TTL(Time-To-Live)索引来自动删除过期的文档。在 Mongoose 中,可以通过设置模式的 expires 属性来使用 TTL 索引。

    7 天前
  • 如何解决 ES12 中的 async/await 错误

    在 ES6 中,我们已经提供了 Promise 对象来解决异步编程的问题。而 async/await 则是在 ES7 中加入的,它让异步代码看起来更加像同步代码,使得程序更加易读易懂。

    7 天前
  • 响应式设计中如何处理页面内容的可读性?

    随着移动设备的普及,越来越多的用户习惯于使用手机和平板电脑浏览网页。在这种情况下,响应式设计应运而生。通过响应式设计,我们可以在不同的设备上优化网页布局和内容,以确保用户能够获得最佳的浏览体验。

    7 天前
  • 在 Angular 项目中使用 Tailwind 的方法和技巧

    Tailwind 是一种流行的 CSS 框架,它提供了大量的预定义样式和组件,帮助我们构建美观而且灵活的界面。在 Angular 项目中使用 Tailwind 可以让我们更加高效地开发和管理 CSS ...

    7 天前
  • 为你的 RESTful API 选择合适的 HTTP 方法

    RESTful API 是一种常用的 Web API 设计风格,它通过 HTTP 协议中的各种方法(HTTP Methods)来实现对资源的 CRUD(创建、读取、更新、删除)操作。

    7 天前
  • 用 SASS 实现响应式导航菜单

    前言 在响应式设计中,一个重要的组成部分就是可以适应不同屏幕尺寸的导航菜单。而 SASS 作为 CSS 预处理器,可以方便地实现响应式导航菜单。在本文中,我们将会学习如何使用 SASS 来创建一个适应...

    7 天前
  • ECMAScript 2020: 了解可选链路径、空值合并运算符和全局选项环境

    ECMAScript 2020 (也称为 ES2020)是 JavaScript 最新的版本,它于2020年发布。本文将介绍 ECMAScript 2020 的三个新功能:可选链路径、空值合并运算符和...

    7 天前
  • 如何避免 CSS Grid 布局的常见错误

    CSS Grid 是一种强大的布局系统,它可以帮助我们更轻松地创建复杂的网格布局。但是,在实际使用中,我们也容易犯一些常见的错误。本文将介绍一些常见的错误,并提供避免这些错误的方法。

    7 天前
  • 在 ESLint 中调整 React 组件属性的换行

    介绍 在 React 开发中,组件的属性通常用单个或多个行内声明方式定义,不过有时候我们需要自动换行来提高代码可读性和维护性。通常情况下,开发人员可以直接在代码中为组件属性设置完整的换行,但这并不够智...

    7 天前
  • Redux 中间件详解及使用场景

    在前端开发中,数据管理是一个非常重要的方面,特别是在大型 Web 应用中。Redux 是一个用于管理应用程序状态的 JavaScript 库,它提供了一个可预测的状态容器,使得在应用中对于数据的操作...

    7 天前

相关推荐

    暂无文章