如何在Express中使用params在路径中渲染模板?

时间:2016-09-03 09:33:05

标签: javascript node.js express

我正在使用Express和Pug模板引擎。我有两条路线:

/个人资料,显示已登录的用户个人资料信息。只能由登录用户访问

/ profile /:id ,显示其他用户的信息。每个人都可以访问。

这是我的代码:

    app.get("/profile/:id", function(req,res) {
      // Get info from DB for specifed username in req.params.id
      res.render("profile.pug", locals);
    });

    app.get("/profile", isLoggedIn, function(req,res) { // isLoggedIn is middleware which checks if user is logged in
      res.render("profile.pug", locals);
    });

我使用express.static提供我的JS / CSS /图像:

app.use(express.static(__dirname+"/public"));

当我浏览 /个人资料时,一切正常,但当我尝试 / profile /:id,时,它会渲染没有样式的模板。 Morgan loggger写道, / profile /:id 试图获取的资源不是来自域根,而是来自/ profile!

GET /profile/css/bootstrap.css 404 7.352 ms

应该是:

GET /css/bootstrap.css 200 7.352 ms

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

最好为这些静态文件定义其他路由。

app.use("/static", express.static(path.resolve('./public/assets')));

然后将所有css文件放在assets文件夹下。之后你可以使用' /static/css/bootstrap.css'在模板文件中。

我在您的代码中假设的问题是它将profile /:id作为当前路径。