Express中绝对和相对路径的难度

时间:2014-07-14 13:35:13

标签: node.js express

我在Express应用程序中有一个API的路径,如下所示:

app.get('/:username/:bookmark/', function(req, res) {

  // do stuff

})

正如所料,此路线解析为:

GET /username/bookmark/

但是,我想为我的静态资源使用相对URL。例如,我希望到main.css的路线解析为:

GET /css/main.css

相反,它目前决定:

GET /username/bookmark/css/main.css

如何让我的应用将静态内容解析为/css/main.css并从网址中删除API的主要组件?

5 个答案:

答案 0 :(得分:6)

我认为你应该选择express路由流程。

将以下行添加到app.js文件

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

将所有.css个文件放在{approot}/public/stylesheets文件夹中。

并在HTML个文件中添加如下链接

<link rel="stylesheet" type="text/css" href="/stylesheets/index.css">

答案 1 :(得分:2)

solution 来源:https://github.com/mongo-express/mongo-express/pull/205

我尝试它的工作,只需添加&#34; /&#34;在链接之前,例如:

你在localhost:8080/courses/ 你的href是:href="style/style.css" 你将进入localhost:8080/courses/style/style.css.

解决方案是添加&#34; /&#34;之前,例如:href="/style/style.css"  它将从root&#34; localhost:8080/style/style.css"

答案 2 :(得分:1)

这是一个具体的例子,使用express.static()中间件来获取在./public中提供文件的典型用例:

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

答案 3 :(得分:1)

如果你在/username/bookmark/并且你像这样链接CSS

<link href="css/main.css" />

或者

<link href="./css/main.css" />

它将解析为/username/bookmark/css/main.css。但你想像这样链接

<link href="/css/main.css" />

问题是,.static - 中间件仅在基本路径/处路由而不是您定义的所有路由。

答案 4 :(得分:1)

使用试试时:

app.get("/:username/:bookmark/", function(req, res) {});

使用:,您不会说明您获得的路径,但它会获取所有路径,并且您知道在键入req.params.usernamereq.params.bookmark时路径是什么。如果您想要/username/bookmark/的路径,则必须执行此操作:

app.get("/username/bookmark/", function() {});
    //Do something
});