我正在使用 play2.1,我需要一个验证器来检查给定名称是否已在 MongoDB 中使用。我正在使用响应式 mongo,它是一个异步 MongoDB 驱动程序,尽管我的问题不依赖于这个库。
一般来说,我想知道在 play framework 和 scala 中使用异步验证的推荐方法是什么?
这是我的代码,我认为这不是解决异步验证的优雅方法:
Reads.verifying[String]{name=>
Await.result(coll.find(Json.obj("name"->name)).one[JsObject].map(_.isEmpty),Duration(1, SECONDS))
}
使用 Reads[T] 验证 JsValue 时的相同模式
notTaken=new Reads[JsValue]{
def reads(js:JsValue):JsResult[JsValue]={
val oid = js \ "_id"
Await.result(coll.find(Json.obj("_id"->oid)).one[JsObject].map(_.isEmpty),Duration(1, SECONDS)) match {
case true => JsSuccess(js)
case false => JsError("Object Id doesn't exist:"+Json.stringify(oid))
}
}
这段代码有效,但看起来并不优雅/粗俗。解决上述情况的任何替代方法。