我设置了一个具有此路由配置的Express应用程序:
app.use(express.static(path.join(__dirname, '../angular-app/dist')));
app.use('/',
express.Router().get('/', function(req, res, next) {
res.redirect('index.html');
})
);
app.use('/v1', v1); // these are my API routes
如果我启动此快速应用程序并在浏览器中导航到其根目录,则会出现Angular应用程序,但如果我导航到 Angular应用程序中的任何路径,例如/ mycomponent /我从Express获得404路由渲染。
我想要发生的是,任何不以/ v1开头的路由都会委托给角度应用,否则我的API就会被提供。这不是思考如何部署这对应用程序的合理方式吗?
为了解决这个问题,我使用反向代理配置托管在Apache服务器上。
<Location /myapp>
ProxyPass http://127.0.0.1:3000
ProxyPassReverse http://1127.0.0.1:3000
</Location>
...当然,我的角度应用在其index.html模板中有<base href="/myapp/"/>
来支持此功能。所以我想知道“正确”执行此操作的唯一方法是使用Express应用程序的反向代理并让仅为API路由提供服务,然后在Apache中使用某种mod_rewrite配置直接从Apache托管Angular应用程序。你觉得怎么样?
答案 0 :(得分:1)
app.get('*', function(req, res, next) {
res.sendFile(path.join(__dirname, '../angular-app/dist/index.html'));
});
将上述代码块放在routes
中间件之前。
原因是Angular是一个SPA,这意味着它必须加载index.html
所有相应的*.js
,并在其中一个*.js
中加载RouterModule
您定义的Routes
。在您通过键入domain/route
导航到另一条路线时,或者在domain/route
上刷新root
,index.html
尚未加载Routes
。因此,浏览器不知道Angular的l = [2, 5, 8, 10]
r = 16
wanted = []
closest = 0
for i in l:
for x in l:
if l.index(x) == l.index(i):
pass
elif i+x == 16:
print('Found')
wanted = [i+x,[l.index(x),l.index(i)]]
break
else:
if (i+x) < r:
if i+x >= closest:
closest = i+x
print(closest)
定义。