从 Lumen 5.2 控制器端点提供 Angular 5 SPA 时的路由问题

Posted

技术标签:

【中文标题】从 Lumen 5.2 控制器端点提供 Angular 5 SPA 时的路由问题【英文标题】:Routing issues when serving Angular 5 SPA out of a Lumen 5.2 controller endpoint 【发布时间】:2018-08-24 16:37:29 【问题描述】:

我正在尝试从单个路由 Lumen 端点提供 Angular SPA。 Angular 应用程序的初始启动在直接导航到端点时有效,加载 Angular SPA 的任何子路由都不起作用

# index.twig

class CoreSpaController extends AbstractTemplateController

    public function index()
    
        return $this->renderView('@spa/index.twig');
    

#routes.php

$app->group([
    'prefix' => 'app',
], function (Application $app) 
    $app->get('/', ['as' => 'app.home', 'uses' => 'Spa\\SpaController@index']);

    $app->get('*', function() 
        return 'foo';
    );
);

Lumen 应用程序通过代理通道提供服务

#nginx.conf

location ~ (/app) 
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://lumenDockerRunningContainer;
  

/app/ 加载正常

/app/foo 是一个正确路由的 Angular 子级,它会抛出一个 Lumen NotFoundHttpException

问题不在 Angular SPA 中,因为当它通过 index.html 提供服务时,应用程序按预期路由。

任何帮助/建议将不胜感激。

【问题讨论】:

尝试注册一个路由将所有请求传递给SpaController@index @OluwafemiSule 这不就是$app->get('*', function() return 'hi'; ); 路由会完成的事情吗? 否,当前返回“hi”。如果想法是让 SpaController@index 作为前端控制器,您需要通过它传递所有请求。 @OluwafemiSule 问题是它不返回'hi',如果返回,我会重定向到route('app.home'); 【参考方案1】:

试试这个。

$app->get('/any:.*', ['as' => 'globalRoute', 'uses' => 'Spa\\SpaController@index']);

【讨论】:

以上是关于从 Lumen 5.2 控制器端点提供 Angular 5 SPA 时的路由问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥从 Lumen 5.2 中删除了 artisan serve 命令?

Lumen 5.2+ 中的视图

如何在 LUMEN 5.2 中激活会话

使用 Laravel/Lumen 5.2 和 apache 2.4

Laravel 5.2 API 与 Lumen 相比如何? [复制]

Lumen 5.2 中未定义命令“make:seeder”