简单操作后播放框架数据库操作
Play framework db action after simple action
所以,基本上我想用 play 框架做的是:
- 检查用户是否已登录 cookie
- 如果用户登录cookie从数据库中获取记录
代码:
def allSamplesJson = Action { implicit request =>
request.session.get("l").map { value =>
value match {
case "i" => DBAction { conn =>
implicit val dbs = conn.dbSession
val all = models.CodeSampleTable.allSamples()
Ok(Json.toJson(all))
}
case _ => Unauthorized(unautStr)
}
}.getOrElse {
Unauthorized(unautStr)
}
}
基本上,如果用户无权获取 json 记录,我什至不想接触 database/open 连接等。上面的代码不起作用(无法编译)。我该如何实现?
这是错误:
你不能像那样将 DBAction
包裹在另一个 Action
中,因为 DBAction
不会 return Result
,它可能 return 类似于 Action[A]
。这意味着您正在尝试 return 更高级别 Action
(Result
和 Action[A]
)中的混合类型,因此编译器将 return 类型推断为是 Object
,当它应该是 Result
.
正如@Mikesname 所建议的,您需要将 DBAction
替换为 DB.withSession
,这将提供您需要的数据库会话,并允许您 return 正确的类型:
DB.withSession { conn =>
val all = models.CodeSampleTable.allSamples()
Ok(Json.toJson(all))
}
所以,基本上我想用 play 框架做的是:
- 检查用户是否已登录 cookie
- 如果用户登录cookie从数据库中获取记录
代码:
def allSamplesJson = Action { implicit request =>
request.session.get("l").map { value =>
value match {
case "i" => DBAction { conn =>
implicit val dbs = conn.dbSession
val all = models.CodeSampleTable.allSamples()
Ok(Json.toJson(all))
}
case _ => Unauthorized(unautStr)
}
}.getOrElse {
Unauthorized(unautStr)
}
}
基本上,如果用户无权获取 json 记录,我什至不想接触 database/open 连接等。上面的代码不起作用(无法编译)。我该如何实现?
这是错误:
你不能像那样将 DBAction
包裹在另一个 Action
中,因为 DBAction
不会 return Result
,它可能 return 类似于 Action[A]
。这意味着您正在尝试 return 更高级别 Action
(Result
和 Action[A]
)中的混合类型,因此编译器将 return 类型推断为是 Object
,当它应该是 Result
.
正如@Mikesname 所建议的,您需要将 DBAction
替换为 DB.withSession
,这将提供您需要的数据库会话,并允许您 return 正确的类型:
DB.withSession { conn =>
val all = models.CodeSampleTable.allSamples()
Ok(Json.toJson(all))
}