在我决定从主 app.js 中提取路线到某些 /routes/myRoute.js 后,我遇到了麻烦。我所有的静态资源都开始从错误的道路走来。
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存储:/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!
我真的不明白为什么应用程序在那里搜索静态资源?
P.S。首次发布到StackOverFlow。如果一个问题太简单,或者某些事情是一个问题,请不要生气。
答案 0 :(得分:1)
应用程序搜索/ re /下的静态资源的原因不是应用程序,而是浏览器请求/re/extensions/jquery/jquery-1.6.4.min.js
。
重播浏览器的请求/响应方案:
请求页面
浏览器收到
//...
script(src='extensions/jquery/jquery-1.6.4.min.js')
//...
网址是相对的,因此浏览器会使用当前网址的方案,主机和父路径/re/
来构建新的绝对网址。
这会产生http://127.0.0.1:3000/re/extensions/jquery/jquery-1.6.4.min.js
。
您可以在jade模板中使用绝对URL来解决此问题:
//...
script(src='/extensions/jquery/jquery-1.6.4.min.js')
//...