如何将不同的 Spray 指令嵌套到 1 个指令中
How do you Nest different Spray Directives into 1 directive
假设我有 1 个身份验证指令。身份验证后,我想登录。这是我目前所做的:
get(...) {
myauthdirective() { v =>
myloggingdirective(v) {
...
}
}
}
所以我想将其转换为单个指令,而不是每次需要验证时都必须有 2 个指令。
我尝试使用平面地图,但这似乎不起作用,因为验证 returns a Directive1 和 logRequestResponse returns Directive0。
// Does not work!
authenticate(myAuthMagnet).flatMap {
case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca)))
}
所以我用地图试了一下,但它似乎没有进入我的日志磁铁功能。
// Does not work either!
authenticate(myAuthMagnet).map {
case ca: returnType =>
logRequestResponse(LoggingMagnet(logme(ca))) // does not go into logme function for some reason
ca
}
我也不能直接调用 logme,因为我也需要请求和响应对象。
有没有办法用 return 不同指令类型的 2 个指令创建一个新指令?谢谢。
您的实施中缺少一件小事。您需要在登录后提供价值。所以实现应该是这样的:
authenticate(myAuthMagnet).flatMap {
case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca))) & provide(ca)
}
假设我有 1 个身份验证指令。身份验证后,我想登录。这是我目前所做的:
get(...) {
myauthdirective() { v =>
myloggingdirective(v) {
...
}
}
}
所以我想将其转换为单个指令,而不是每次需要验证时都必须有 2 个指令。
我尝试使用平面地图,但这似乎不起作用,因为验证 returns a Directive1 和 logRequestResponse returns Directive0。
// Does not work!
authenticate(myAuthMagnet).flatMap {
case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca)))
}
所以我用地图试了一下,但它似乎没有进入我的日志磁铁功能。
// Does not work either!
authenticate(myAuthMagnet).map {
case ca: returnType =>
logRequestResponse(LoggingMagnet(logme(ca))) // does not go into logme function for some reason
ca
}
我也不能直接调用 logme,因为我也需要请求和响应对象。
有没有办法用 return 不同指令类型的 2 个指令创建一个新指令?谢谢。
您的实施中缺少一件小事。您需要在登录后提供价值。所以实现应该是这样的:
authenticate(myAuthMagnet).flatMap {
case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca))) & provide(ca)
}