0

我正在尝试从Node.js我遇到的唯一问题中提供静态文件,如果我继续进入子路径,如下所示:

localhost:3000/foo/bar/baz/quux

然后我必须加强相同的次数,如下所示:

../../../../public/javascripts/whatever.js

如您所见,这真的很烦人,有没有办法让 Express v3 只知道这样我就可以做/public/javascripts/whatever.js而不必加强?提前致谢

这是我当前的 Express 静态中间件

app.use("/public", express.static(__dirname + '/public'));
4

2 回答 2

3

如果您从根目录(即src='/some/path/to/file.js')引用您的静态文件,则 url 应该无关紧要。

使用静态路由的示例网站

目录结构

/public
    /css/style.css
    /js/site.js
/vendor/thoughtbrain/js/awesome-town.js
/views/view.html
/app.js

视图.html


<!DOCTYPE html>
<html>
  <head>
    <!-- These files are served statically from the '/public' directory... -->
    <link href="/css/style.css" rel="stylesheet" >
    <script src="/js/site.js"></script>
    <!-- ... while this is "mounted" in virtual '/public' -->
    <script src="/public/js/awesome-town.js"></script>
  </head>
<body><p>Express</p></body>
</html>

应用程序.js

var express = require('express'),
    http = require('http'),
    path = require('path'),
    app = express();

// Remember: The order of the middleware matters!

// Everything in public will be accessible from '/'
app.use(express.static(path.join(__dirname, 'public')));

// Everything in 'vendor/thoughtbrain' will be "mounted" in '/public'
app.use('/public', express.static(path.join(__dirname, 'vendor/thoughtbrain')));

app.use(express.static(path.join(__dirname, 'views')));

app.all('*', function(req, res){
  res.sendfile('views/view.html')
});

http.createServer(app).listen(3000);

随着这个应用程序的运行,

http://localhost:3000

http://localhost:3000/foo/bar/baz/quux

都服务view.html和所有引用的资产解析。

Express Framework 有一节介绍静态中间件的使用。

于 2013-04-23T05:33:30.740 回答
0

有了这种static()配置,Express 至少已经能够找到/public/javascripts/whatever.js.

但是,它确实取决于您的public文件夹是否与脚本位于同一目录中(由于__dirname在指定路径时使用了 )。

如果是,则 URL 前缀/public应映射到./public(with .being __dirname) 的文件系统前缀,以便:

A URL of `/public/javascripts/whatever.js`
Maps to `./public/javascripts/whatever.js`
于 2013-04-22T03:07:24.247 回答