所以我之前问过这个问题,并改变了很多代码。
现在我正在执行我的函数,这些函数在 detach() 块中返回 HTTPresponses,这样我就不会阻塞。然后这些完成并返回给客户端,但我似乎仍然无法让我的路由工作。
在我的测试中,对单个斜杠的请求可以正常工作,但是其他任何操作(例如下面显示的创建用户路径)都会失败。我似乎无法弄清楚为什么,并且喷雾路由使用了如此多的构造,我很难弄清楚系统如何工作得足够好以找出发生了什么。
我尝试在某些路径周围插入 logRequest 块,认为这可能会告诉我发生了什么,但它们似乎都没有受到打击。任何帮助将不胜感激。
val route: Route = {
host("fakebook.com", "www.fakebook.com") {
pathSingleSlash {
complete("pong")
} ~
pathPrefix("users") { req =>
path("newuser") {
put {
detach() {
complete(genericPut(CreateUser(req.request)))
}
}
} ~
... rest of routing
这是我的scalatest的样子,简单的Put通过,但newuser的put没有
val createUserSuccessRequest = Put(Uri("http://www.fakebook.com/users/newuser") withQuery(F_User.lastNameString -> "Doe", F_User.firstNameString -> "John", F_User.bioString -> "i like foobar",
F_User.ageString -> "42", F_User.dobString -> dateFormatter.format(new Date(1970 - 1900, 5, 7))))
"The FakeBook route" when {
"When sending a single slash request" should {
"respond with a simple pong" in {
Get() ~> logRequestResponse("plain get final request and response")(sealRoute(route)) ~> check {
assert(responseAs[String] == "pong")
}
}
}
"Running route to create a user with PUT" should {
"forward a message to the backbone to create a new user" in {
createUserSuccessRequest ~> logRequest("create user final request and response"){sealRoute(route)} ~> check {
expectMsg(CreateUser(createUserSuccessRequest))
}
}
}
}