【问题标题】:express js not serving the static css files from routerexpress js 不提供来自路由器的静态 css 文件
【发布时间】:2018-05-22 11:41:19
【问题描述】:

我实际上在另一个更大的项目中遇到了这个问题,但是我做了一个简单的,以便于解释它

我的项目的树结构如下

demo
|____admin
|         |____admin.js
|____node_modules
|
|____static
|         |____bootstrap.min.css
|         |____headerStyle.min.css
|
|____views
|    |____admin
|    |    |____admin_home.ejs
|    |
|    |____partials
|                 |____admin_header.ejs
|
|____index.js
|____package-lock.json
|____package.json

请多包涵,我将贴出一些重要文件的代码

'index.js' 中的代码是这样的

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

app.use(express.static(path.join(__dirname, 'static')));
app.set('view engine', 'ejs');
app.get('/',function(req,res)
{
  res.render('./admin/admin_home');
});

let admin = require('./admin/admin.js');
app.use('/admin',admin);

app.listen(9000,function(){
  console.log('listening to port : 9000');
});

'admin/admin.js' 中的代码是这样的

let express = require('express');
let router = express.Router();

router.get('/',function(req,res)
{
  res.render('./admin/admin_home');
});

router.get('/adminhome',function(req,res)
{
  res.render('./admin/admin_home');
});

module.exports = router;

'views/admin/admin.ejs' 中的代码是这样的

<%- include('../partials/admin_header.ejs')  %>

<h1>Admin Home</h1>

我在使用 express js 静态文件服务时遇到问题。

对于以下 URL,网页使用 css 文件中的所有样式呈现

http://localhost:9000
http://localhost:9000/admin

从这些路径提供服务

http://localhost:9000/bootstrap.min.css

http://localhost:9000/headerStyle.css

但对于以下 URL,网页以纯 html 呈现,不提供 css 样式

http://localhost:9000/admin/adminhome

错误是

Failed to load the resources: the server responded with 404

css 文件从这些路径提供

http://localhost:9000/admin/bootstrap.min.css

http://localhost:9000/admin/headerStyle.css

“vies/partials/admin_header.ejs”中的“Link”标签如下

<link rel="stylesheet" type="text/css" href="bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="headerStyle.css">

模块版本如下

ejs:^2.5.7
express:^4.16.2
path:^0.12.7

我的 nodejs 版本是 v8.5.0

请帮助我找到解决此问题的方法。谢谢你

【问题讨论】:

  • 您的样式的href 与您正在访问的网址相关。您可以将它们设为绝对值,例如:href="/bootstrap.min.css".
  • @RolandStarke 非常感谢,这很有效,将您的解决方案添加到答案中,我会接受它。再次感谢您

标签: css node.js express routing


【解决方案1】:

正如 Roland Starke 所引用的,样式的 href 与我正在访问的 url 相关。我可以通过添加一个'/'来使它们绝对化

href="/bootstrap.min.css"

【讨论】:

    【解决方案2】:

    你应该在 index.js 中添加一行

    app.set('views', path.join(__dirname, 'views'));
    

    【讨论】:

    • 感谢您考虑我的问题,我按照您的建议做了,但仍然遇到同样的问题。