热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ExpressApp如何提供不需要的静态文件?

本文介绍了如何使用ExpressApp提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。

我有一个Express提供的React应用。整个应用程序包含在public / index.html中。

现在,我的server.js如下所示:

1 const express = require('express');
2 const path = require('path');
3 const port = process.env.PORT || 8080;
4 const app = express();
5
6 // the __dirname is the current directory from where the script is running
7 app.use(express.static(__dirname));
8
9 app.get('*',(req,res) => {
10 res.sendFile(path.resolve(__dirname,'public/index.html'));
11 });
12
13 app.listen(port);

但是,以某种方式提供了诸如package.json和/.ssh/known_hosts之类的文件,这些东西显然不应该使用。

我不确定为什么app.get('*',res)...不能捕获所有请求,为什么app.use(express.static(__dirname));似乎是允许我的应用程序处理任何静态文件的唯一配置。

我没有app.use(express.static(__dirname+'/public'));

的运气

app.use( '/',express.static(__dirname + '/public'));

或其他我能找到的东西。

编辑---

我的项目目录如下:

/myproject
package.json
server.js
/public
index.html

我希望所有请求都只提供index.html

我仍然不明白的是为什么

app.use('*',express.static(path.resolve(__dirname,'/public/index.html')));

不提供任何服务。

此外,为什么在上面的示例中,res.sendFile()在不首先调用express.static()的情况下什么也不做。如果我删除第7行,则没有任何内容。


所以,永远不要这样做:

app.use(express.static(__dirname));

在您的主服务器目录中。这样便可以查看您所有的服务器文件。

使用express.static()服务整个目录时,应创建一个仅包含供公众使用的文件的目录,然后指向express.static()


  

我不确定为什么app.get('*',(req,res)...不能捕获所有请求

因为app.get('*',...)在您的express.static()之后,所以如果express.static()找到匹配的文件,则app.get('*',...)甚至看不到请求。已经处理,路由不再继续。


express.static()一如既往地就您应该做的事情提供建议,我们需要知道您所拥有的精确配置。文件系统中相对于主服务器目录的公共文件在哪里,以及您打算在客户端中使用哪些URL来引用那些公共可用的文件。


这是一个理论上的例子(因为您没有提供详细信息):

假设您有这样的文件:

/myproject
app.js
/public
main.css

并且,假设您希望能够使用/main.css作为客户端的URL。为此,您只需要在app.js中进行此操作:

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

在第一个示例中,您将在顶级路径中提供这些静态文件,然后必须确保这些顶级资源与您要提供的任何实际路由之间都没有命名冲突。

如果您希望客户端URL为/assets/main.css,则可以这样做:

app.use("/assets",express.static(path.join(__dirname,"public")));

在此示例中,您必须确保/public子目录(及其可能包含的任何子目录)仅包含旨在公开访问的文件。

在公共URL中添加路径,例如/assets消除了静态资产与顶级路由之间命名冲突的可能性。这可能是一件好事,因为在任何多人项目中,处理静态资产(例如CSS文件)的人员与处理服务器路由的人员不同的情况并不少见,因此这两个主要人员不会直接知道什么名称对方正在使用。在单人项目中,您一定会把它全放在脑子里,这样可以避免意外的命名冲突。


仅供参考,我更喜欢文件夹组织:

/myproject
/server
app.js
/public
main.css

哪些是服务器文件,哪些是公共文件在100%明显。然后,要使用/assets/main.css的URL从app.js中提供公共文件,我将这样做:

app.use("/assets","../public")));


根据您的评论:


  

我只想为所有('*')GET请求提供public / index.html。所有其他数据均来自单独的API。似乎res.sendFile()必须先使用express.static才能工作。上面的代码驻留在server.js中

如果您要做的只是为所有请求提供public/index.html(其中publicapp.js所在的子目录),请删除{{1} }完全是中间件。

只需在app.js中使用它:

express.static()
,

删除O(n**3)

这表明表示要加载所有存在的文件

,

app.use(express.static(__dirname));将使您的应用程序不安全。
始终在控制台中打印出path.resolve(__dirname,'public/index.html')之类的URL,以了解其中是否存在问题。似乎针对静态文件的根目录会出现问题。将它们放在常规的公共目录中,然后重试


推荐阅读
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • andr ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
author-avatar
悠闲自在的鱼叫_688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有