CSS 未使用 req.params 或其他内容加载

Luk*_*Bas 2 javascript css express

我对节点、表达等非常陌生。我制作了一个博客应用程序,但遇到了问题。我正在使用 mongoose、node、express 和 ejs。

当我打电话时

router.get('/posts', function(req, res){   Post.find({}, function(err, posts){
    res.render('viewpost.ejs', {
      posts
    });   }); });
Run Code Online (Sandbox Code Playgroud)

一切都工作得很好。我收到了我的帖子,CSS 也正常工作了。问题是当我打电话时

router.get('/posts/:posts_id', function(req, res){
  Post.find({_id: req.params.posts_id}, function(err, posts){
      res.render('viewpost.ejs',{
         posts
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

帖子似乎有效,但在控制台中我得到了

GET /posts/posts.css 304 1.854 ms 并且 viewpost.ejs 看起来没有使用 css。

服务器文件server.js

app.use(express.static('public'))
app.use(express.static(path.join(__dirname, 'public/css/')));
app.use(express.static(path.join(__dirname, 'public/img/')));

viewpost.ejs

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.css"/>
    <link rel="stylesheet" href="style.css">
    <script src="/bower_components/jquery/dist/jquery.js"></script>
  </head>
  <body class="cyc">
  <% include ./partials/navbar.ejs %>

<%= posts %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

因此,当我使用没有 req.params 的路线时,一切似乎都工作正常。当我使用任何参数调用它时,我的 css 文件不起作用。

Ste*_*nev 8

<link rel="stylesheet" href="style.css">style.css尝试从 HTML 页面所在的同一路径加载。因此,对于/posts,它将尝试加载/style.css,对于/posts/1,它将尝试加载/posts/style.css。但后者与您的/posts/:posts_id端点匹配,因此会被调用,而不是posts_id == 'style.css',这是无意义的。

解决方案很简单,使链接成为绝对链接:

<link rel="stylesheet" href="/style.css">
Run Code Online (Sandbox Code Playgroud)