Express中绝对和相对path的困难

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

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

正如所料,这条路线解决了:

 GET /username/bookmark/ 

不过,我想为我的静态资源使用相对的URL。 例如,我想要到我的main.css的path来解决:

 GET /css/main.css 

相反,它现在解决了:

 GET /username/bookmark/css/main.css 

如何让我的应用程序将静态内容parsing为/css/main.css并从URL中删除API的主要组件?

我认为你应该走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"> 

下面是一个具体的例子,使用express.static()中间件在./public文件中提供服务文件的典型用例:

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

如果你在/username/bookmark/和你这样链接CSS

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

或这个

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

它将parsing为/username/bookmark/css/main.css 。 但是你想要像这样链接

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

问题是, .static -middleware只在基本path/而不是你定义的所有路由路由。

解决scheme来源: https : //github.com/mongo-express/mongo-express/pull/205

我试着工作,只需在链接前添加“/”,例如:

你在localhost:8080 / courses /和你的href是:href =“style / style.css”你将会导致localhost:8080 / courses / style / style.css。

解决方法是在之前添加“/”,例如:href =“/ style / style.css”它将从根目录开始“localhost:8080 / style / style.css”

使用try时:

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

使用:你不会指定你得到的path,但它会得到所有的path,如果你inputreq.params.usernamereq.params.bookmark你就知道path是什么。 如果你想要的path/username/bookmark/你必须这样做:

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