我在routes
文件中定义了 300 个条目,如下所示:
GET /url001 MyClass.myMethod
这适用于诸如http://localhost:9000/url001
现在,我需要为这 300 个链接定义两个环境,用于生产和测试。链接如下所示:
http://localhost:9000/prod/url001
用于生产(请参阅路径中的prod
)
和
http://localhost:9000/test/url001
用于测试(请参阅路径中的test
)。
我想在routes
中拥有一组链接,如何在Play中实现?我知道我可以在路径中定义一个变量,例如path/:var
,但我需要的是设置一个相对 URL。
注意:某些用户可能正在使用prod
而其他用户可能同时使用test
您可以使用 SIRD(字符串插值路由 DSL): https://www.playframework.com/documentation/2.6.x/ScalaSirdRouter#Binding-sird-Router
您需要描述 scala 源中的 30 个条目,然后在路由中执行这两个记录并将它们绑定到 scala 自定义路由器。
自定义路由器将如下所示:
package my.app
import javax.inject.Inject
import play.api.mvc._
import play.api.routing.Router.Routes
import play.api.routing.SimpleRouter
import play.api.routing.sird._
class MainRouter @Inject()(controller: ApiController)
extends SimpleRouter
{
override def routes: Routes = {
case GET(p"/url001") => MyClass.myMethod001
case GET(p"/url002") => MyClass.myMethod002
}
}
conf/routes
将如下所示:
/prod my.app.MainRouter
/test my.app.MainRouter
不过,您需要以某种方式了解应用程序内部的内容,我不知道您的想法是什么 - 会话(cookie)或令牌或......
因为测试环境不会用于实际测试系统。它适用于商业智能应用程序,用户将在将查询迁移到生产环境之前测试他们构建的查询。从系统的角度来看,生产和测试都是生产。从用户的角度来看,生产和测试是不同的环境
在这种情况下,我建议您创建两个不同的分期付款。
与其使用一组重复的路由来引入大量复制/粘贴代码,不如使用基于角色的逻辑。 假设设置了某种会话管理/用户识别机制,那么测试用户可以拥有测试凭据,登录时将具有角色/会话属性来指示仅测试功能。 理想情况下,您将有不同的专用实例,因为它们看起来已经用于不同的事情。