給予一定的一UserRepository
:斯卡拉 - 篩選失敗一定條件
class UserRepository {
val collection = Mongo.connect("users")
def findBy(key: String, value: String): Future[Option[User]] = {
collection.flatMap(
_.find(document(key -> value)).one[User]
)
}
}
我想寫一個login
方法:
def login(email: String, password: String): Future[Option[User]] = {
import scala.concurrent.ExecutionContext.Implicits.global
repo.findBy("email", email)
// .filter { user => BCrypt.checkpw(password, user.password) }
}
如何將我寫的findBy
到結果的映射如果他們測試失敗BCrypt.checkpw(password, user.password)
,將所有Some(user)
的變成None
?我能做些什麼來改變None
失敗的Some
?
你就不能使用您註釋掉'filter'法:在它的簽名(
Option[User]
)你可能想這已經說明?它有什麼問題? – marstran直接進入過濾器的問題是該值是'Some'或'None',因此只需執行'BCrypt.checkpw(password,user.password)'拋出: '編譯錯誤[value password is不是Option [authentication.User]]的成員' – danbroooks
當然,我可以在過濾器內部做一個匹配,我只是想知道是否有什麼比模式匹配更好用在這裏?感覺有點奇怪,執行模式匹配,然後只是返回另一個「選項」(這可能只是我的思路,在這種情況下這是一個完全合理的事情) – danbroooks