为什么要表达路由器更改静态资源的路径?

时间:2015-06-17 07:26:20

标签: node.js express

在我决定从主 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。如果一个问题太简单,或者某些事情是一个问题,请不要生气。

1 个答案:

答案 0 :(得分:1)

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

重播浏览器的请求/响应方案:

  1. 请求页面

    获取http://127.0.0.1:3000/re/page=1

  2. 浏览器收到

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

    1. 网址是相对的,因此浏览器会使用当前网址的方案,主机和父路径/re/来构建新的绝对网址。

    2. 这会产生http://127.0.0.1:3000/re/extensions/jquery/jquery-1.6.4.min.js

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

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