为什么expression路由器改变path到静态资源?

在我决定从主app.js提取路由到一些/routes/myRoute.js之后,我遇到了麻烦。 我所有的静态资源开始从错误的path中获得。

App.js

var express = require('express'); var app = express(); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.static(__dirname + '/public')); //... app.use('/re*', require('./routes/re')); // ... 

/routes/re.js

 var express = require('express'); var router = express.Router(); // example 127.0.0.1:3000/re/ router.get('/', function(req, res){ res.render('perspectives/re'); } // example 127.0.0.1:3000/re/page=2 router.get('/page=*', function(req, res){ // some code res.redirect('/re'); } 

/perspectives/re.jade

 extends ../layout block pageResources script(src='extensions/jquery/jquery-1.6.4.min.js') //... 

jQuery.js存储path:/ public / extensions / jquery / jquery-1.6.4.min.js

问题! 如果我正在导航http://127.0.0.1:3000/re – 一切似乎确定!

 GET http://127.0.0.1:3000/re GET http://127.0.0.1:3000/extensions/jquery/jquery-1.6.4.min.js ... 

但是,当我试图去http://127.0.0.1:3000/re/page=1 – 比我的服务器收到几个请求:

 GET http://127.0.0.1:3000/re/page=1 GET http://127.0.0.1:3000/re/extensions/jquery/jquery-1.6.4.min.js // wrong pass! 

我真的不明白为什么应用程序在那里search静态资源?

PS首先发布到StackOverFlow。 如果一个问题太简单,或者有些问题没有解决,请不要生气

应用程序search/ re /下的静态资源的原因不是应用程序,而是浏览器请求/re/extensions/jquery/jquery-1.6.4.min.js

要重放浏览器的请求/响应场景,请执行以下操作:

  1. 请求页面

    GET http://127.0.0.1:3000/re/page=1

  2. 浏览器收到

//... script(src='extensions/jquery/jquery-1.6.4.min.js') //...

  1. URL是相对的,所以浏览器通过使用当前URL的scheme,主机和父path/re/来构build新的绝对URL。

  2. 这导致http://127.0.0.1:3000/re/extensions/jquery/jquery-1.6.4.min.js

您可以通过在您的玉石模板中使用绝对URL来解决此问题:

//... script(src='/extensions/jquery/jquery-1.6.4.min.js') //...