如何在 express.js 中相对于子目录索引文件服务器静态文件


I have a structure like so
/applications
/applications/testRoute
/applications/testRoute/index.html
/applications/testRoute/test.js
/applications/server.js

我正在运行一个快速应用程序,在子路径中有多个角度应用程序。每个 SPA 都有一个启动操作的索引文件。当我从父目录运行快速服务器时,子目录中的任何索引文件都会尝试从父目录开始发出对静态文件的请求。我应该能够使用相对文件路径,但它们都从服务器的根目录开始。怎么来了?正如你在下面的例子中看到的(test-route)将尝试从主目录而不是从/testRoute/test.js请求test.js。我试过'test.js','./test.js/','/test.js'。任何子目录索引文件始终尝试将其相对路径作为服务器的根目录。怎么来了?


// server.js
// BASE SETUP
// ==============================================
var express = require('express');
var path = require('path');
var app = express();
var port    =   process.env.PORT || 8080;
// ROUTES
// ==============================================
// sample route with a route the way we're used to seeing it
app.use('/testRoute', express.static('testRoute'));
app.get('/', function(req, res) {
var options = {
root: __dirname + '/'
};
res.sendFile('index.html',options);
});
app.get('/test-route', function(req, res) {
var options = {
root: __dirname + '/testRoute'
};
res.sendFile('index.html',options);
});
app.listen(port);
<!--Test Route Index -->
<html>
<head>
<script src="test.js"></script>
</head>
<h1>Test Route</h1>
</html>

我处理这个问题的方法是使应用程序的每个部分都成为自己的应用程序express。这样,他们可以定义自己的静态文件夹。然后,您只需将它们全部粘合到另一个带有app.use('/test-route', myTestRouteApp)express应用程序中即可。

这是您的second-app.js

const express = require('express');
module.exports = () => {
const app = express();
app.use('/static', express.static(...));
...
return app;
};

这是您的app.js

const express = require('express');
const secondApp = require('./second-app');
module.exports = () => {
const app = express();

app.use('/second-app', secondApp());
...
return app;
};

因此,启动应用程序后,您现在可以访问/second-app/static/.

最新更新