Минимальный пример для 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)
}
Другие вопросы по тегам