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

时间:2017-06-24 19:03:39

标签: javascript node.js express

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>

1 个答案:

答案 0 :(得分:0)

我处理这个问题的方法是让应用程序的每个部分都是自己的express应用程序。这样,他们就可以定义自己的静态文件夹。然后,您只需将express应用程序与app.use('/test-route', myTestRouteApp)粘贴在一起。

这是您的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/