0

我尝试做这样的事情:

var main = express();
main.use(express.static(path.resolve('./asset')));
main.route('someroute', someHandle);
var app = express();
app.use(express.static(path.resolve('./asset')));
app.route('someroute', someHandle);
main.use('/app', app);

资产/asset/someasset.js服务良好,但未 /app/asset/someasset.js返回 (404),路径解析为正确的文件夹。

我试过app.use('/app', express.static(path.resolve('./asset')));- 不工作,但是main.use('/app', express.static(path.resolve('./asset')));- 工作!

express.static与已安装的子应用一起使用是否有一些限制?

升级版:

我尝试使用http://expressjs.com/ru/4x/api.html#express app.mountPath 中所述的已安装应用程序,期望作为子应用程序的快速安装的所有功能都应该在其中工作,并且偶然发现了静态问题我想知道这个用例是否有限制?他们可能是什么?

4

2 回答 2

2

编辑:您对 path.resolve 的使用都是错误的。

path.resolve('./asset')
在这两种情况下都解析到同一个文件夹。中间件的挂载点只影响 url 而不是目录文件夹。按照下面的建议重写你的代码,一切都会像宣传的那样工作

我的猜测是 express.static 仍在原始路径上运行。所以试试这个

var main = express();
main.use(express.static(path.resolve('./asset')));
main.route('someroute', someHandle);
var app = express();
app.use(express.static(path.resolve('./app/asset')));
app.route('someroute', someHandle);
main.use(app);

于 2015-07-03T19:26:15.237 回答
1

您的用例看起来很适合 Express Router,它是“中间件和路由的隔离实例”:

http://expressjs.com/4x/api.html#router

具体来说,尝试更换

var app = express();

var app = express.Router();
于 2015-07-03T19:15:00.523 回答