【发布时间】:2018-07-24 12:29:25
【问题描述】:
过去几天我一直遇到这个问题,但似乎无法解决这个问题。我们正在做一个非常基本的节点/快递应用程序,并尝试使用以下方式提供我们的静态文件:
app.use(express.static(path.join(__dirname, "static")));
这在很大程度上符合我的预期。我们的静态文件夹中有几个文件夹用于我们的 css 和 javascript。我们正在尝试使用这个静态路径将我们的 css 加载到我们的 EJS 视图中:
<link rel="stylesheet" type="text/css" href="/css/style.css">
当我们到达我们的路线/ 时,我们得到了所有的内容,但我们的 CSS 没有加载。我们特别收到了这个错误:
拒绝应用来自“http://localhost:3000/css/style.css”的样式 因为它的 MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型,并启用严格的 MIME 检查。
我尝试过的:
- 清除 NPM 缓存/全新安装
npm verify cacherm -rf node_modulesnpm install
- 清除浏览器缓存
- 对文件夹名称和对文件夹名称的各种修改
- 在 href 中添加/删除正斜杠
- 将 css 文件夹移动到根目录并从那里提供服务
- 在
path.join(__dirname, '/static/')中添加/删除斜线 - 在 github 问题报告中有一条关于服务人员可能会搞砸事情的评论,并且似乎解决了很多人的问题。我们的本地主机没有服务工作者:https://github.com/facebook/create-react-app/issues/658
- 我们没有使用 react,但我可以找到任何可以找到的 google 搜索
路线:
app.get("/", function(req, res) {
res.render("search");
});
视图:
<!DOCTYPE html>
<html>
<head>
<title>Search for a Movie</title>
<link rel="stylesheet" type="text/css" href="/static/css/style.css">
</head>
<body>
<h1>Search for a movie</h1>
<form method="POST" action="/results">
<label for="movie-title">Enter a movie title:</label><br>
<input id="movie-title" type="text" name="title"><br>
<input type="submit" value="Submit Search">
</form>
</body>
</html>
package.json:
{
"name": "express-apis-omdb",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "nodemon index.js",
"lint:js": "node_modules/eslint/bin/eslint.js ./ ./**/*.js --fix; exit 0",
"lint:css": "node_modules/csslint/cli.js public/css/; exit 0"
},
"license": "ISC",
"devDependencies": {
"babel-eslint": "^6.0.4",
"csslint": "^0.10.0",
"eslint": "^2.11.1",
"eslint-config-airbnb": "^9.0.1",
"eslint-plugin-import": "^1.8.1",
"eslint-plugin-jsx-a11y": "^1.3.0",
"eslint-plugin-react": "^5.1.1"
},
"dependencies": {
"body-parser": "^1.18.2",
"dotenv": "^5.0.0",
"ejs": "^2.5.7",
"express": "^4.13.4",
"morgan": "^1.7.0",
"path": "^0.12.7",
"request": "^2.83.0"
}
}
项目结构:
-app
--node_modules
--static
---img
---css
---js
--views
---movie.ejs
---results.ejs
---search.ejs
--index.js
--package-lock.json
--package.json
注意:我们目前没有为我们的 EJS 使用布局文件。
如果需要,我很乐意提供更多详细信息。
【问题讨论】:
-
您所做的所有调试步骤都假设浏览器没有接收到 css 文件(您假设路径有问题)。但实际上恰恰相反——浏览器接收到 css 文件但拒绝将其视为 css。您可以通过尝试直接在浏览器中打开 css URL 来验证这一点(它应该显示您的 css 源代码)。相反,express.static 将 css 文件作为 html
its MIME type ('text/html')提供服务。从那里调试 -
谷歌看看 express.static 如何确定文件类型
-
我不会把我的 cmets 作为答案,因为我知道问题是什么,但不知道解决方案。你得想办法解决
-
你的静态路由器是什么样子的,你有没有尝试使用
express.static? -
感谢大家的意见,特别是 slebetman。学生在 css 文件
/style.css的末尾有一个空格。我应该从 css 文件中缺少语法高亮注意到这一点。
标签: node.js express mime-types static-files