Node.js 为什么express Router更改静态资源的路径?
在我决定将我的路线从mainapp.js提取到一些/routes/myRoute.js之后,我遇到了麻烦。我所有的静态资源开始从错误的路径获取 App.jsNode.js 为什么express Router更改静态资源的路径?,node.js,express,Node.js,Express,在我决定将我的路线从mainapp.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'
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'));
// ...
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');
}
/routes/re.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'));
// ...
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');
}
/perspecties/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
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'));
// ...
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');
}
问题强>
如果我在导航-一切似乎都好
GET http://127.0.0.1:3000/re
GET http://127.0.0.1:3000/extensions/jquery/jquery-1.6.4.min.js
...
但当我试图转到时,我的服务器会收到几个请求:
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发送邮件。如果一个问题太简单,或者有不正确的地方,请不要生气。应用程序在/re/下搜索静态资源的原因不是应用程序,而是浏览器请求
/re/extensions/jquery/jquery-1.6.4.min.js
要重播浏览器的请求/响应场景,请执行以下操作:
//...
脚本(src='extensions/jquery/jquery-1.6.4.min.js')
//...
/re/
)来构建一个新的绝对URLhttp://127.0.0.1:3000/re/extensions/jquery/jquery-1.6.4.min.js
//...
脚本(src='/extensions/jquery/jquery-1.6.4.min.js')
//...
似乎传递了绝对URL-这是一个解决方案。但我认为还有另一种方法可以解决这个问题,比如:1)将我的express应用程序实例传递给路由器,以便路由器知道从哪里获取静态资源。2) 或者像我在express应用程序中一样,将静态目录传递给路由器:router.use(express.static(uu类似于ootdirName+'/public')
顺便说一句,absolute pass对我来说不是一个好的解决方案,因为我的服务器可以在不同的主机上运行,所以从代码的角度来看,为每个页面配置主机地址是相当复杂的:(