【问题标题】:How to serve two AngularJS apps with one Express server?如何使用一台 Express 服务器为两个 AngularJS 应用程序提供服务?
【发布时间】:2018-07-19 18:49:41
【问题描述】:

我四处搜索,找到了几种方法,但似乎没有一种方法特别适合我的需求,我无法让它们发挥作用。我的最新尝试如下,使用express-subdomainexpress 并尝试根据传入的子域为两个单独的AngularJS 应用程序提供服务。这段代码目前似乎为正确的应用程序提供服务,但我所看到的都没有包含任何 Angular 模块。浏览器控制台有很多'Uncaught SyntaxError: Unexpected token sub-domain 并提供第二个静态应用程序时。

我已经尝试过vhost,但结果类似。

server.js

app.use(subdomain('app1',express.static(__dirname + '/public/app1')));
app.use(subdomain('app2',express.static(__dirname + '/public/app2')));

require('./app/routes')(app); // configure our routes

app.listen(port);

routes.js

app.get('*', function(req, res) {
    var firstIndex = req.get('host').indexOf('.');
    var subdomain = req.get('host').substr(0,firstIndex).toLowerCase();
    if (subdomain === 'app1'){
      res.sendFile(root + '/public/app1/views/index.html');
    }else if (subdomain === 'app2'){
      res.sendFile(root + '/public/app2/views/index.html');
    }else{
      res.sendFile(root + '/public/app1/views/notfound.html');
    }
});

【问题讨论】:

    标签: angularjs node.js express subdomain


    【解决方案1】:
    if (subdomain === 'app1'){
          res.sendFile(root + '/public/app1/views/index.html');
    

    这似乎是错误的。 这会将 index.html 发送到任何请求,即对 js 文件的请求。 应该是:

    if (subdomain === 'app1' && req.url.indexOf('.') === -1){ 
    } else if (subdomain === 'app2' && req.url.indexOf('.') === -1){
    } else { /* return static asset */ }  
       ...
    

    【讨论】:

      【解决方案2】:

      如果您创建一个通用的 json whit 不同的实例和不同的应用程序并创建所有调用,您可以模拟这个。这是一个例子:

      const routes = {
          routeApp1: {
              appTest1:{
                  url: '/appTest1/appTest1',
                  file: './mock/appTest1.json',
              },
              appTest2:{
                  url: '/appTest1/appTest2',
                  file: './mock/appTest2.json',
              },
          }
      
          routeApp2: {
              appTest1:{
                  url: '/appTest2/appTest1',
                  file: './mock/appTest1.json',
              },
              appTest2:{
                  url: '/appTest2/appTest2',
                  file: './mock/appTest2.json',
              },
          }
      };
      
      app.get(routes.routeApp1.appTest1.url, (req, res) => {
          res.send(JSON.stringify(require(routes.routeApp1.appTest1.file)));
      });
      
      app.get(routes.routeApp2.appTest2.url, (req, res) => {
          res.send(JSON.stringify(require(routes.routeApp2.appTest2.file)));
      });
      
      app.listen(3000, () => {
          console.log(`Mocks app listening on port ${port}!`);
      });
      

      【讨论】:

      • 这毫无意义。
      猜你喜欢
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2020-07-02
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多