ExpressJS - 在同一个Express Server上使用不同的基本目录提供多个Web应用程序

时间:2018-05-18 14:40:36

标签: javascript node.js express

我正在尝试为不同的路线提供不同静态目录的网站。

  • 如果对/tools*路由发出get请求,我想使用/dist/toolsApp/目录作为我的前端代码的基本目录。

  • 如果对/net*路由发出get请求,我想使用/dist/netIdApp/目录作为我的前端代码的基本目录。

  • 如果对*路由发出get请求,我想使用/dist/homeApp/目录作为我的前端代码的基本目录。

我无法确定在哪里插入app.use(express.static(__dirname + DIRECTORY));代码行。我最初尝试下面的代码,但很快意识到这段代码不对,因为我不想合并目录(它们有相互冲突的文件名)。

// Tools Routes
app.use(express.static(__dirname + '/dist/toolsApp/'));
app.get('/tools*', function(req, res) {
    res.sendFile(path.join(__dirname + '/dist/toolsApp/index.html'));
    });

app.use(express.static(__dirname + '/dist/netIdApp/'));
// Net-Id Authenticated Routes
app.get('/net*', function(req, res) {
  res.sendFile(path.join(__dirname + '/dist/netIdApp/index.html'));
});


app.use(express.static(__dirname + '/dist/homeApp'));
// Default Route
app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname + '/dist/homeApp/index.html'));
});

然后我尝试为每个app.uses指定一个路由,如下所示。而且似乎只发送了最后一条路线(我也尝试将最后一个app.use从'*'改为'/'并且没有改变任何东西)。结果是前端get请求最终在文件名后附加了'/',使得Express服务器将请求解释为目录而不是常规文件。我真的不确定为什么会这样。

// Tools Routes
app.use('/tools*', express.static(__dirname + '/dist/toolsApp/'));
app.get('/tools*', function(req, res) {
    res.sendFile(path.join(__dirname + '/dist/toolsApp/index.html'));
    });

app.use('/net*', express.static(__dirname + '/dist/netIdApp/'));
// Net-Id Authenticated Routes
app.get('/net*', function(req, res) {
  res.sendFile(path.join(__dirname + '/dist/netIdApp/index.html'));
});


app.use('*', express.static(__dirname + '/dist/homeApp'));
// Default Route
app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname + '/dist/homeApp/index.html'));
});

最后,我已尝试将该行放在相应的app.get中,但这样做不正常(express不发送前端文件)。

// Tools Routes
app.get('/tools*', function(req, res) {
    app.use(express.static(__dirname + '/dist/toolsApp/'));
    res.sendFile(path.join(__dirname + '/dist/toolsApp/index.html'));
    });

// Net-Id Authenticated Routes
app.get('/net*', function(req, res) {
  app.use(express.static(__dirname + '/dist/netIdApp/'));
  res.sendFile(path.join(__dirname + '/dist/netIdApp/index.html'));
});

// Default Route
app.get('*', function(req, res) {
  app.use(express.static(__dirname + '/dist/homeApp'));
  res.sendFile(path.join(__dirname + '/dist/homeApp/index.html'));
});

有人可以帮我确定最佳方法吗? 节点:v8.11.2 快递:

1 个答案:

答案 0 :(得分:1)

能够解决问题,以下代码确实有效,它只是将文件分别放在address.com/tools/,address.com/net/和address.com/中。

// Tools Routes
app.use('/tools*', express.static(__dirname + '/dist/toolsApp/'));
app.get('/tools*', function(req, res) {
    res.sendFile(path.join(__dirname + '/dist/toolsApp/index.html'));
    });

app.use('/net*', express.static(__dirname + '/dist/netIdApp/'));
// Net-Id Authenticated Routes
app.get('/net*', function(req, res) {
  res.sendFile(path.join(__dirname + '/dist/netIdApp/index.html'));
});


app.use('*', express.static(__dirname + '/dist/homeApp'));
// Default Route
app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname + '/dist/homeApp/index.html'));
});