[英]MIME type error with express.static and CSS files
我正在使用快递和节点。 在我的server.js
文件中,我有这段代码:
app.use(express.static('/static'));
随后在我的静态目录中,我有一个 CSS 文件夹,然后是一个style.css
文件。 在我的index.html
,我像这样链接到工作表:
<link rel="stylesheet" type="text/css" href="/static/css/style.css">
但是,在我的本地主机中,我继续收到此错误:
拒绝应用来自“ http://localhost:3500/static/css/style.css ”的样式,因为它的 MIME 类型(“text/html”)不是受支持的样式表 MIME 类型,并且启用了严格的 MIME 检查。
我确信我的标签中的路径名是正确的,我很困惑为什么我会收到这个错误。 我是否需要声明 CSS 文件被处理为 CSS 而不是 HTML? 当我说type="text/CSS"
时,我不是在这样做吗? 如果没有,我需要在我的服务器文件中添加什么来解决这个问题?
app.use(express.static('/static'));
意味着静态文件是从/static
字面上提供的。 在基于 Unix 的操作系统中,这是根目录/
的直接子级。 我不认为你这样做,但你不应该存储文件,更不用说该目录中可公开访问的文件了。 相反,您可能正在寻找的是应用程序目录中的static
目录。
这是您可以告诉 express 使用该服务器文件的方式:
app.use(express.static(__dirname + "/static"));
发生 MIME 类型错误是因为所提供的文件可能是 Express 制作的“404 Not Found”页面,因为它无法找到该文件。
如果你不能在你的 HTML 中包含一个文件,那么总是双重检查,甚至最好是三重检查,确保可以首先通过浏览器访问该文件。
此外,文件然后位于 /...,而不是 /static/...
我知道这个问题很老,但我想用一个简单的例子来补充我的两分钱,因为我花了一段时间才弄清楚这个问题。
工作示例:
我的文件位于/usr/noah
/usr/noah/index.js
const express = require('express')
const path = require('path')
const app = express()
const port = 8080
app.use(express.static(__dirname + '/static'));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'static/index.html'))
});
app.listen(port, () => {
console.log('Listening on port: ' + port)
});
/usr/noah/static/index.html
<html>
<head>
<link rel='stylesheet' href='style.css' type='text/css'>
</head>
<body>
<div id='main'>
<h1>Hello World</h1>
</div>
</body>
</html>
/usr/noah/static/style.css
#main {
margin: 3em;
padding: 1em;
border: 1px solid gray;
border-radius: 10px;
}
h1 {
color: blue;
}
然后我使用以下命令从/usr/noah
运行它: node index.js
说明
我倾向于用例子做得更好,所以就在上面。 要解释发生了什么问题,请参见下文:
app.use(express.static('public'))
这在很多 express 文档中都有使用。 只有当您的服务器位于文件系统的根目录时,它才像 alanionita 提到的那样工作得很好。 如您所知,我在/usr/noah
两层深。
将此更改为工作示例app.use
可确保您的文件从正确的目录提供,在本例中为/usr/noah/static
。
我有同样的错误,但它是由不匹配的情况引起的。 我在我的 HTML 文件中写道:
<script src = "./myScript.js"></script>
但实际的文件名是MYSCRIPT.js
。 我没有注意到这一点,因为当我在本地打开 HTML 文件时,浏览器似乎忽略了这一点,甚至导入了大小写不匹配的文件。
我正在使用快递和节点。 在我的server.js
文件中,我有这段代码:
app.use(express.static('/static'));
随后在我的静态目录中,我有一个 CSS 文件夹,然后是一个style.css
文件。 在我的index.html
,我像这样链接到工作表:
<link rel="stylesheet" type="text/css" href="/static/css/style.css">
但是,在我的本地主机中,我继续收到此错误:
拒绝应用来自 ' http://localhost:3500/static/css/style.css ' 的样式,因为它的 MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型,并且启用了严格的 MIME 检查。
我确信我的标签中的路径名是正确的,我很困惑为什么我会收到这个错误。 我是否需要声明 CSS 文件被处理为 CSS 而不是 HTML? 当我说type="text/CSS"
时,我不是在这样做吗? 如果没有,我需要在我的服务器文件中添加什么来解决这个问题?
正如其他海报所说,这很少是“实际”的 MIME 类型问题。
通常它是定义错误的公共/静态文件配置和不受欢迎的文件的组合。
// file structure
public/
assets/
css/
stylesheet.css
images/
avater.jpeg
js/
main.js
controllers/
user
createUser.js
readUser.js
models/
User.js
index.js
views/
layouts/
main.handlebars
homepage.handlebars
server.js
app.js
来自此处的 Express 文档: https : //expressjs.com/en/starter/static-files.html
app.use(express.static('public'))
这仅在我们的服务器位于文件系统的根目录时才有效,这对于服务器来说很好 - 对于其他任何事情,不是那么多。
app.use(express.static(__dirname + '/public'))
这将从节点应用程序的目录名称构建到 public 的路径。
它将允许我们将项目文件夹放置在驱动器上的任何位置,而不会妨碍运行时。
// homepage.handlebars
<section>
</section>
<script src="/js/main.js"></script>
上述 Express 文档中提供了说明。
// Sample of file paths created by public/
http://localhost:3000/js/main.js
这意味着当我们链接到该文件时,我们只需将/
前缀添加到我们的文件/文件夹中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.