Минимальный пример для autowire и upickle
Я не совсем понимаю, как минимальный пример может быть применен к моему веб-приложению.
В коде клиента я переопределяю doCall
метод:
override def doCall(req: Request) = {
println(req)
MyServer.routes.apply(req)
}
Но как клиент может узнать о MyServer
?
Конечно, здесь это работает, поскольку весь код находится в одном файле, но в действительности клиент и сервер взаимодействуют через общий кросс-проект.
Нужно ли мне писать doCall
явно с dom.ext.Ajax.post
?
1 ответ
Решение
Я верю, что вы хотите, это более длинный пример. Минимальный пример демонстрирует API Autowire в том же проекте (не очень полезный). Более длинный пример демонстрирует истинное взаимодействие клиент / сервер.
Например, это показывает, как doCall
может быть реализовано с помощью вызова AJAX:
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)
}