如何使用一台Express服务器为两个AngularJS应用程序提供服务?

时间:2018-07-19 01:19:40

标签: angularjs node.js express subdomain

我已经到处搜索,并且找到了一些方法来执行此操作,但是似乎没有任何一种方法可以满足我的需求,因此我无法使它们正常工作。我最近的尝试是在下面进行尝试,将express-subdomainexpress结合使用,并尝试根据传入的子域为两个单独的AngularJS应用程序提供服务器。目前,此代码似乎可用于正确的应用程序,但是据我所见,没有Angular模块包含在内。浏览器控制台有许多错误,例如“未捕获的SyntaxError:意外的令牌<”。我认为,根据以前的经验,这意味着AngularJS没有正确加载。请记住,我只运行一个AngularJS应用程序没有问题,只有当我尝试引入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');
    }
});

2 个答案:

答案 0 :(得分:0)

dataService.delete({ itemId: itemId}, {})
                .$promise
                .then((data) => {
                    // Statements
                })
                .catch((error) => {
                    // Logging
                })
                .finally(() => {});

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

if (subdomain === 'app1'){
      res.sendFile(root + '/public/app1/views/index.html');

答案 1 :(得分:-1)

如果您创建一个通用的json不同实例,并创建所有调用,则可以模拟此实例。这是示例:

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}!`);
});