为什么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
。
要重放浏览器的请求/响应场景,请执行以下操作:
-
请求页面
-
浏览器收到
//... script(src='extensions/jquery/jquery-1.6.4.min.js') //...
-
URL是相对的,所以浏览器通过使用当前URL的scheme,主机和父path
/re/
来构build新的绝对URL。 -
这导致
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') //...