使用node和express服务获取(/ foo /:bar)请求,当res.render(模板)时,模板中的所有相对链接都是相对于/ foo而不是/

我的节点服务器代码中的违规路由是这样的:

app.get('/s/:searchTerm', function(req, res) { res.render('index'); }); 

发生这种情况之后,index.jade中的所有相关链接都是相对于“hostname / s /”,而不是“hostname /”,这是破坏的。

我的节点设置如下所示:

 app.set('view engine', 'jade'); app.set('views', __dirname + '/views'); app.use(express.static(__dirname + '/public/')); app.use(express.favicon(__dirname + '/public/img/favicon.ico')); app.use(express.json()); app.use(app.router); 

除了/ s /:searchTerm路由之外,所有这些路由都起作用。 即使是/结果路线。 在那里,partials / result中的相对链接与我所期望的'hostname'相关。

 app.get('/', function(req, res) { res.render('index'); }); app.get('/s/:searchTerm', function(req, res) { res.render('index'); }); app.get('/results', function(req, res) { res.render('partials/results'); }); 

index.jade只是引用layout.jade:

 extends layout 

layout.jade像这样开始:

 !!! 5 html(lang='en' data-ng-app='FooApp') head meta(charset='utf-8') meta(http-equiv='X-UA-Compatible', content='IE=edge') meta(name='viewport', content='width=device-width, initial-scale=1.0') meta(name='author', content='foo@gmail.com`') link(rel='shortcut icon', href='img/favicon.ico') title FooApp.com â„¢ // Bootstrap core CSS link(href='//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css', rel='stylesheet') // Custom css for this template link(href='css/style.css', rel='stylesheet') //if lt IE 9 script(src='https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js') script(src='https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js') body(data-ng-controller='SearchController' .navbar.navbar-inverse.navbar-fixed-top(role='navigation') .container .navbar-header button.navbar-toggle(type='button' data-target='.navbar-collapse' 

我如何渲染一个部分,并保持在部分相对于'主机名'的链接?

编辑:增加了index.jade和layout.jade代码

编辑:啊,我看到我正在做一些与favicon冗余

您看到的行为是hrefs相对于加载它们的页面所期望的。 由于您的/a/:searchTerm路线嵌套在/a ,所以像img/favicon.ico这样的静态资产的hrefs将会选取相对的父路线。 如果你想让href在你的公共目录的根目录中寻找静态资源,那么在/ hrefjoin/就像这样: /img/favicon.ico