I am not quite getting how the minimal example can be applied to my web app.
In the client code I override the doCall
method:
override def doCall(req: Request) = {
println(req)
MyServer.routes.apply(req)
}
But how can the client know about MyServer
?
Of course, here it works since all code is in the same file, but in reality the client and server communicate via the shared crossproject.
Do I need to write the doCall
explicitly with dom.ext.Ajax.post
?
I believe what you want is the longer example. The minimal example demonstrates the Autowire API within the same project (not extremely useful). The longer example demonstrates a true client/server interaction.
For example, it shows how doCall
can be implemented with an AJAX call:
object Client extends autowire.Client[Js.Value, Reader, Writer]{
override def doCall(req: Request): Future[Js.Value] = {
dom.ext.Ajax.post(
url = "/api/" + req.path.mkString("/"),
data = upickle.json.write(Js.Obj(req.args.toSeq:_*))
).map(_.responseText)
.map(upickle.json.read)
}
def read[Result: Reader](p: Js.Value) = readJs[Result](p)
def write[Result: Writer](r: Result) = writeJs(r)
}