Node/Express - 拒绝应用样式,因为它的 MIME 类型('text/html')

新手上路,请多包涵

在过去的几天里,我一直遇到这个问题,似乎无法深入了解。我们做一个非常基本的节点/快递应用程序,并试图使用这样的东西来提供我们的静态文件:

 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 检查。

我试过的:

  1. 清除 NPM 缓存/全新安装
    • npm verify cache
    • rm -rf node_modules
    • npm install
  2. 清除浏览器缓存
  3. 对文件夹名称和对其的引用的各种修改
  4. 从 href 添加/删除正斜杠
  5. 将 css 文件夹移动到根目录并从那里提供服务
  6. path.join(__dirname, '/static/') 添加/删除斜线
  7. 有一条关于服务人员可能在 github 问题报告中搞砸的评论,并且似乎解决了很多人的问题。我们的本地主机没有服务工作者: https ://github.com/facebook/create-react-app/issues/658
    • 我们没有使用反应,但我正在掌握我能找到的任何谷歌搜索

路线:

 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>

包.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 使用布局文件。

如果需要,我很乐意提供更多详细信息。

原文由 Matthew 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 876
2 个回答

问题是文件命名不正确的结果。我们的学生在 style.css 文件的末尾有一个空格。对此有一些提示,第一个是文本编辑器中缺少语法突出显示,第二个是文本编辑器检测其他新创建的 css 文件的文件类型,但没有检测到不正确命名的文件。删除空间解决了这个问题。

感谢 slebetman 帮助我指出正确的方向。

原文由 Matthew 发布,翻译遵循 CC BY-SA 3.0 许可协议

在带有 express 的 Nodejs 应用程序中,我们需要添加如下行来告诉服务器有关目录的信息

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

这样就解决了CSS不渲染的问题

原文由 Surekha K 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题