[Play 2.x] 자바스크립트 라우팅 처리

 플레이는 jsRouter ​가 따로있어서 정말 편리하다. 내가 만든 컨트롤러를 자바스크립트에서 마치 함수처럼 사용할 수 있기 때문이다. 

User.scala

def addUser(name:String,  email:String, pic_url:String, token:String) = Action{

    val code:Int = Users.addUser(name, email, pic_url, token)

    val json:JsValue = JsObject(

      Seq(“code” -> JsNumber(code))

    )

    Ok(json).withSession(

      “USER_NAME” -> name,

      “USER_EMAIL” -> email,

      “PIC_URL” -> pic_url,

      “USER_TOKEN” -> token

    )

  }


Application.scala

def javascriptRoutes = Action { implicit request =>

    import routes.javascript._

    Ok(

      Routes.javascriptRouter(“jsRoutes”)(

        User.addUser,

      )

    ).as(“text/javascript”)

  } 

routes

#User

POST        /User/addUser                          controllers.User.addUser(name:String, email:String, pic_url:String, token:String)

# Javascript Route

GET         /javascriptRoutes                      controllers.Application.javascriptRoutes

main.scala.html 

<script type=”text/javascript” src=”@routes.Application.javascriptRoutes”></script>

$.ajax(

                                jsRoutes.controllers.User.addUser(

                                    response.name,

                                    response.email,

                                    response2.picture.data.url,

                                    response2.id

                                )

                            ).done(function(data){

                                console.log(data.code);

                                });

                            } ).fail(function(e){

                                console.log(e);

                            })

 위와 같은 식으로 하면 굳이 Ajax 설정을 하지 않더라도 스크립트 내부에서 같은 함수 이름과 인자를 통해 송수신 한다는 자체가(것도 별다른 설정 없이) 놀랍지 않은가. 뭐 사실은 내부적으로 ​route.js 로 함수식으로 포팅해주곤 하지만, 그래도 편한건 사실이다. 


문자