从 web 应用程序的客户端,我点击了一个服务器端路由,它只是第三方 API 的包装器。使用分派,我试图使服务器端请求将第三方 API的确切标头和响应返回到客户端 AJAX 调用。
当我这样做时:
val req = host("third-pary.api.com, 80)
val post = req.as("user", "pass") / "route" << Map("key" -> "akey", "val" -> "aval")
Http(post > as.String)
我总是看到200
返回到 AJAX 调用的响应(有点预期)。我已经看到使用的Either
语法,但我真的更像一个Any
,因为它只是确切的响应和标题。这要怎么写?
我应该提到我在服务器端使用 Scalatra,所以本地路由是:
post("/route") {
}
编辑:
这是我正在使用的建议的 Either 匹配示例,但match
语法没有意义 - 我不在乎是否有错误,我只想返回它。此外,我似乎无法使用此方法返回 BODY。
val asHeaders = as.Response { response =>
println("BODY: " + response.getResponseBody())
scala.collection.JavaConverters.mapAsScalaMapConverter(
response.getHeaders).asScala.toMap.mapValues(_.asScala.toList)
}
val response: Either[Throwable, Map[String, List[String]]] =
Http(post > asHeaders).either()
response match {
case Left(wrong) =>
println("Left: " + wrong.getMessage())
// return Action with header + body
case Right(good) =>
println("Right: " + good)
// return Action with header + body
}
理想情况下,解决方案返回 Scalatra ActionResult(responseStatus(status, reason), body, headers)
。