感谢老大,原因为注册options路由的Route::options('[{path:.+}]', function () {});
写法为匿名函数,而webman判断路由是否为属于应用插件是由命名空间判断的,匿名函数没有这些东西 所以就没有走应用插件的中间件.
应用插件中配置了中间件处理跨域请求,发现请求没有经过中间件。
这里粘代码
应用插件中的config/middleware.php截图
中间件代码截图
应用插件中route.php代码截图
发送请求后:
options请求没报错 但是响应头不全,控制台只输出了"option router"未输出"corsMiddleware"
post请求报错 控制台无任何输出
--
这里写具体的系统环境相关信息
更新一下 我继续调试的过程
我给中间件加了一个构造函数参数 如图:
然后再在
config/middleware.php
和/应用插件目录/config/middleware.php
分别都引入了这个中间件并传入不同的参数:请求的目标控制器方法(控制器存在于应用插件内):
发起请求后发现浏览器中请求成功返回了结果,控制台的输出为:
预检请求在项目中间件中直接被返回了(代码逻辑控制的我能理解),但是为什么POST请求没有经过项目中间件...
我又再次测试,将项目/config/middleware.php中引入的中间件注释掉,发现POST直接请求不通了,控制栏中输出为空 但是OPTIONS请求依然可以请求通(这就是开贴时的情况)。
我再次测试 将注释的中间件恢复,把控制器中的方法改写为了:
结果请求又不通了,浏览器报CORS错误,控制台输出为:
我将应用插件内的middleware.php中引入中间件的代码注释后请求又正常了。
控制台中输出
注:我在应用插件内exception.php指定了异常处理类并在response中加入了中间件中同样的响应头
精简一个能重现问题的项目,zip打包发到我邮箱 walkor@workerman.net
好的等有空了我就搞一个🥰🥰
我也碰到了这个问题