Playframework路由文件:将生产路由与开发路由分开
是否有一种方法可以注释路由,以告知某个区段/组路由仅在开发或生产模式下可用?嗯,这没有记录,因此我不确定这是否是有意实现的,但我已经找到了一种方法来实现这一点。但是请注意,由于这是一个未记录的功能,可能意味着它是非故意的,因此可能会在未来版本的play中中断 您可以使用routes文件中的以下行实现所需Playframework路由文件:将生产路由与开发路由分开,playframework,routes,playframework-1.x,Playframework,Routes,Playframework 1.x,是否有一种方法可以注释路由,以告知某个区段/组路由仅在开发或生产模式下可用?嗯,这没有记录,因此我不确定这是否是有意实现的,但我已经找到了一种方法来实现这一点。但是请注意,由于这是一个未记录的功能,可能意味着它是非故意的,因此可能会在未来版本的play中中断 您可以使用routes文件中的以下行实现所需 %{ if (play.mode.isDev()) }% 我用几个动作创建了一个测试应用程序 public class Application extends Controller {
%{ if (play.mode.isDev()) }%
我用几个动作创建了一个测试应用程序
public class Application extends Controller {
public static void index() {
render();
}
public static void noDev() {
renderText("NoDev");
}
public static void noProd() {
renderText("NoProd");
}
}
然后,我将以下内容添加到我的routes文件中
# Home page
GET / Application.index
# Ignore favicon requests
GET /favicon.ico 404
# Map static resources from the /app/public folder to the /public path
GET /public/ staticDir:public
%{ if (play.mode.isDev()) }%
GET /route1 Application.noDev
GET /route2 Application.noDev
GET /route3 Application.noDev
* /{controller}/{action} {controller}.{action}
%{ if (play.mode.isProd()) }%
GET /route4 Application.noProd
GET /route5 Application.noProd
GET /route6 Application.noProd
* /{controller}/{action} {controller}.{action}
因此,您可以看到,使用一个简单的if语句,它将仅在该模式下执行下一组路由。当找到下一个if语句时,if语句将结束
如果在开发模式下尝试访问route4,您将无法访问它,并且您将看到RouteNotFound页面,显示可用的路由是您为开发人员定义的路由。对于play framework 2.x版:
- 您需要在应用程序的根目录中有另一个
文件(与原始路由
文件的目录相同),该文件仅包含生产所需的路由路由
- 然后在
文件夹中创建另一个conf
文件,如.conf
prod.conf
- 现在,这个新的conf文件必须包含以下内容:
include "application.conf"
play.http.router=prod.Routes
或者不带新的.conf
文件传递参数:
-Dplay.http.router=prod.Routes
如果大于2.4,则:
include "application.conf"
application.router=prod.Routes
当您运行产品时,请使用
-Dconfig.file=prod.conf
运行它,这非常好。我不知道你可以在路由文件中做逻辑,我知道你可以做一些逻辑,因为这是一个解决战争背景问题的方法,但不确定有多少逻辑是可能的。所以我试过了,它成功了!您还可以使用groovy if标记,例如{if(play.mode.isDev())}一些路由{/if}
,如果您想自己结束的话:只是为了加强@kheraud上面的评论:这在游戏2中不起作用。