Node.js 为什么express Router更改静态资源的路径?

Node.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'

在我决定将我的路线从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'));
//...
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')
    //...
    

  • URL是相对的,因此浏览器通过使用当前URL的方案、主机和父路径(即
    /re/
    )来构建一个新的绝对URL

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

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

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

    似乎传递了绝对URL-这是一个解决方案。但我认为还有另一种方法可以解决这个问题,比如:1)将我的express应用程序实例传递给路由器,以便路由器知道从哪里获取静态资源。2) 或者像我在express应用程序中一样,将静态目录传递给路由器:
    router.use(express.static(uu类似于ootdirName+'/public')
    顺便说一句,absolute pass对我来说不是一个好的解决方案,因为我的服务器可以在不同的主机上运行,所以从代码的角度来看,为每个页面配置主机地址是相当复杂的:(