如何通过 Express 路由到多个 Angular 应用程序?
How to route to multiple Angular apps via Express?
问题是,我有一个 server
和 client
文件夹,而不是客户端我有 2 个 Angular 应用程序:1 个用于网站,1 个用于仪表板。
https://github.com/leongaban/bitage/tree/website
目前,在我 运行 服务器并点击路径 /
后,您将被路由到网站应用程序,一旦到达那里,我似乎无法路由到仪表板应用程序。
文件夹结构:
server/
client/
website/
dashboard/
服务器/内部的main.js正确路由到网站应用程序,但无法路由到仪表板/
//website api
=============
var website = express.Router();
app.use('/', website);
app.use('/', express.static("../client/website/"));
console.log(__dirname + "../client/website/");
website.use(function(req, res, next) {
console.log(req.method, req.url);
next();
});
website.get('/', function(req, res) {
var path = 'index.html';
res.sendfile(path, { 'root': '../client/website/' });
});
//dashboard api
===============
var dashboard = express.Router();
app.use('/dashboard', dashboard);
app.use('/', express.static("../client/dashboard/"));
console.log(__dirname + "../client/dashboard/");
dashboard.use(function(req, res, next) {
console.log(req.method, req.url);
next();
});
dashboard.get('/dashboard', function(req, res) {
var path = 'index.html';
res.sendfile(path, { 'root': '../client/dashboard/' });
});
网站的mainController路由配置:
.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', { url: '/home' })
.state('about', {
url: '/about',
templateUrl: 'views/about.html'
})
.state('login', {
url: '/login',
templateUrl: 'views/login.html'
})
.state('register', {
url: '/register',
templateUrl: 'views/register.html'
});
$urlRouterProvider.otherwise('/home');
}])
一旦我点击 http://localhost:9999/
,网站 Angular 应用程序接管:http://localhost:9999/#/home
我在网站视图中,无法切换路线和查看仪表板应用程序。
以下是仪表板应用程序的主控制器中的配置
.config([
'$stateProvider',
'$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('wallet', { url: '/wallet' })
.state('wallet', {
url: '/wallet',
templateUrl: 'views/wallet.html'
})
.state('accounts', {
url: '/accounts',
templateUrl: 'views/accounts.html'
})
.state('settings', {
url: '/settings',
templateUrl: 'views/settings.html'
})
.state('help', {
url: '/help',
templateUrl: 'views/help.html'
});
$urlRouterProvider.otherwise('wallet');
}])
您如何更改 Express 应用程序 (main.js) 中的路由以允许我更改 Angular 应用程序?
即:
http://localhost:9999/#/home = 网站
http://localhost:9999/#/dashboard = 仪表板
最简单的方法是更改服务器中的这一行:
app.use('/', express.static("../client/dashboard/"));
对此:
app.use('/', express.static("../client/"));
在您的 Angular 应用中:
.state('about', {
url: '/about',
templateUrl: 'dashboard/views/about.html'
})
但是,您可能 运行 遇到让一个后端为两个前端服务的问题。您是否考虑过将您的服务器分成两个 api 以分离关注点?
实现此目的的另一种(可能更符合行业标准)方法是使用 nginx 为您的静态资产提供服务,并充当反向代理为每个后端提供静态 API 路由。
需要考虑的事情。我并不是要向您提供过多的信息,或者在没有实际回答您的问题的情况下让您陷入困境。因此,请告诉我第一个选项是否有效或部分有效,但您想扩展它以获得其他功能。
问题是,我有一个 server
和 client
文件夹,而不是客户端我有 2 个 Angular 应用程序:1 个用于网站,1 个用于仪表板。
https://github.com/leongaban/bitage/tree/website
目前,在我 运行 服务器并点击路径 /
后,您将被路由到网站应用程序,一旦到达那里,我似乎无法路由到仪表板应用程序。
文件夹结构:
server/
client/
website/
dashboard/
服务器/内部的main.js正确路由到网站应用程序,但无法路由到仪表板/
//website api
=============
var website = express.Router();
app.use('/', website);
app.use('/', express.static("../client/website/"));
console.log(__dirname + "../client/website/");
website.use(function(req, res, next) {
console.log(req.method, req.url);
next();
});
website.get('/', function(req, res) {
var path = 'index.html';
res.sendfile(path, { 'root': '../client/website/' });
});
//dashboard api
===============
var dashboard = express.Router();
app.use('/dashboard', dashboard);
app.use('/', express.static("../client/dashboard/"));
console.log(__dirname + "../client/dashboard/");
dashboard.use(function(req, res, next) {
console.log(req.method, req.url);
next();
});
dashboard.get('/dashboard', function(req, res) {
var path = 'index.html';
res.sendfile(path, { 'root': '../client/dashboard/' });
});
网站的mainController路由配置:
.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', { url: '/home' })
.state('about', {
url: '/about',
templateUrl: 'views/about.html'
})
.state('login', {
url: '/login',
templateUrl: 'views/login.html'
})
.state('register', {
url: '/register',
templateUrl: 'views/register.html'
});
$urlRouterProvider.otherwise('/home');
}])
一旦我点击 http://localhost:9999/
,网站 Angular 应用程序接管:http://localhost:9999/#/home
我在网站视图中,无法切换路线和查看仪表板应用程序。
以下是仪表板应用程序的主控制器中的配置
.config([
'$stateProvider',
'$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('wallet', { url: '/wallet' })
.state('wallet', {
url: '/wallet',
templateUrl: 'views/wallet.html'
})
.state('accounts', {
url: '/accounts',
templateUrl: 'views/accounts.html'
})
.state('settings', {
url: '/settings',
templateUrl: 'views/settings.html'
})
.state('help', {
url: '/help',
templateUrl: 'views/help.html'
});
$urlRouterProvider.otherwise('wallet');
}])
您如何更改 Express 应用程序 (main.js) 中的路由以允许我更改 Angular 应用程序?
即:
http://localhost:9999/#/home = 网站
http://localhost:9999/#/dashboard = 仪表板
最简单的方法是更改服务器中的这一行:
app.use('/', express.static("../client/dashboard/"));
对此:
app.use('/', express.static("../client/"));
在您的 Angular 应用中:
.state('about', {
url: '/about',
templateUrl: 'dashboard/views/about.html'
})
但是,您可能 运行 遇到让一个后端为两个前端服务的问题。您是否考虑过将您的服务器分成两个 api 以分离关注点?
实现此目的的另一种(可能更符合行业标准)方法是使用 nginx 为您的静态资产提供服务,并充当反向代理为每个后端提供静态 API 路由。
需要考虑的事情。我并不是要向您提供过多的信息,或者在没有实际回答您的问题的情况下让您陷入困境。因此,请告诉我第一个选项是否有效或部分有效,但您想扩展它以获得其他功能。