Node.js 在提供静态文件时,这里的问题是什么

Node.js 在提供静态文件时,这里的问题是什么,node.js,express,routes,static-files,Node.js,Express,Routes,Static Files,文件夹结构 const express = require('express'); const path = require('path'); const app = express(); // Use static folder middleware app.use(express.static(path.join(__dirname , "public"))); // Get app.get("/" , (req , res)=>{ r

文件夹结构

const express = require('express');
const path = require('path');
const app = express();

// Use static folder middleware
app.use(express.static(path.join(__dirname , "public")));

// Get 
app.get("/" , (req , res)=>{
  res.sendFile(`${__dirname}/index.html`);
});

// Listen
app.listen(3000 , ()=>{
   console.log('server running on port 3000');  
});
在index.html页面中,index.css文件和image.png被链接。 然而,在app.js中,这两个文件并不是作为静态文件存储在服务器上。但我已经包括了中间的服务静态文件夹

有人能解释一下问题是什么吗


注册
.bd占位符img{
字体大小:1.125rem;
文本锚定:中间;
-webkit用户选择:无;
-moz用户选择:无;
用户选择:无;
}
@介质(最小宽度:768px){
.bd占位符img lg{
字体大小:3.5rem;
}
}
注册
名字
姓
电子邮件ID
登录

&复制;2020-2021年

这是从引导程序中获取的html页面 此模板的注释自定义样式下的css文件 png在表单标签下面

当html页面在浏览器中独立显示时,文件被正确添加,然后图像和css显示出来

但是,当使用node和express提供服务时,图像和css不会显示

更新帖子:

根据@Nav最近给出的关于mime类型错误的评论,下面是我在

“Express文档显示,如果您将 文件名。“

先试试这个例子。如果这不起作用,请重新加载并检查Dev控制台是否存在不同的错误。您的问题可能有多个原因

原职:

根据您提交的代码,我认为您的问题在于默认的CORS策略。您需要合并一种方法,允许在您正在使用的域、端口和协议之间进行跨源资源共享。我发现了一个很好的文档,明确但简洁地详细介绍了CORS,并提供了一个特别适合您需要的解决方案。您可以在浏览器中打开Dev控制台,查找文档中列出的类似错误消息以进行确认

以下是链接:

更新帖子:

根据@Nav最近给出的关于mime类型错误的评论,下面是我在

“Express文档显示,如果您将 文件名。“

先试试这个例子。如果这不起作用,请重新加载并检查Dev控制台是否存在不同的错误。您的问题可能有多个原因

原职:

根据您提交的代码,我认为您的问题在于默认的CORS策略。您需要合并一种方法,允许在您正在使用的域、端口和协议之间进行跨源资源共享。我发现了一个很好的文档,明确但简洁地详细介绍了CORS,并提供了一个特别适合您需要的解决方案。您可以在浏览器中打开Dev控制台,查找文档中列出的类似错误消息以进行确认

以下是链接:


好的,我在这里回答我自己的问题。 在参考@jdmayfield的答案并搜索MIME类型错误后,我找到了这个链接

我意识到,当您在节点中将公用文件夹设置为静态时,则不应将该公用文件夹添加到css或html图像的路径中

意思是 在上面给出的文件夹结构中,如果我们想在html中链接css,我们使用的代码是

var filePath = 'path/to/image.png';
res.contentType(path.basename(filePath));
// Content-Type is now "image/png"

这给了我一个MIME类型的错误。 所以我把上面的代码改为

<link href="./public/css/index.css" rel="stylesheet">

这起作用了


但是,如果您在vscode中独立打开HTML文件,则不会加载css和图像。但是当使用node服务时,它们将被服务。

好的,所以我在这里回答我自己的问题。 在参考@jdmayfield的答案并搜索MIME类型错误后,我找到了这个链接

我意识到,当您在节点中将公用文件夹设置为静态时,则不应将该公用文件夹添加到css或html图像的路径中

意思是 在上面给出的文件夹结构中,如果我们想在html中链接css,我们使用的代码是

var filePath = 'path/to/image.png';
res.contentType(path.basename(filePath));
// Content-Type is now "image/png"

这给了我一个MIME类型的错误。 所以我把上面的代码改为

<link href="./public/css/index.css" rel="stylesheet">

这起作用了


但是,如果您在vscode中独立打开HTML文件,则不会加载css和图像。但是当使用node时,它们将被提供。

你能显示使用css和png的HTML吗?我已经更新了。请再次检查你显示的css和png使用的HTML?我已经更新。请再次检查引用以应用“”中的样式,因为其MIME类型(“文本/html”)不是受支持的样式表MIME类型,并且已启用严格的MIME检查。-->正在显示此错误,您知道有关此错误的详细信息吗?您使用的浏览器是什么?您是否设置了有关MIME类型的自定义标志?某些浏览器不将文件扩展名与mime类型关联,但要求将Content-type:header显式设置为mime类型。例如,Opera过去因为这一点而臭名昭著,尽管他们现在像其他大多数人一样在铬基上运行,所以这可能不再适用于他们。@Nav I更新了我的答案。我记得我几年前写的一个定制香草服务器也有类似的问题。我使用了一个带有文件扩展名键和mime类型值的数组,如果不匹配,则使用默认值,并在内容类型头中设置它。但是,由于您使用的是Express,因此大部分工作已经包含在内。如果您仍然存在相同的问题,但错误不同,那么您已经成功地克服了第一个原因,并且需要找到第二个原因。我使用chrome浏览器。我对MIME类型一无所知。这是我第一次遇到MIME类型。所以我没有设置任何自定义f