我将如何捕获所有404错误并重定向到/app/index.html(我试图满足Angular将所有未找到的资源转发到index.html的需要)?我以为实现自己的中间件会奏效,但不确定我做对了
public final class ForwardToAngularMiddleware: Middleware {
public func respond(to req: Request, chainingTo next: Responder) throws -> EventLoopFuture<Response> {
do {
let response: Future<Response> = try next.respond(to: req)
return response
} catch let error as AbortError {
if error.status == .notFound && req.http.url.path.starts(with: "/app") {
return Future.map(on: req) { req.redirect(to: "/index.html") }
}
throw error
}
}
}
无论我发送什么URL,我的程序都永远不会碰到catch块。我正在这样配置我的中间件:
middlewares.use(FileMiddleware.self)
middlewares.use(ForwardToAngularMiddleware())
middlewares.use(ErrorMiddleware.self)
middlewares.use(SessionsMiddleware.self)
services.register(middlewares)
答案 0 :(得分:1)
您可能在这里遇到了两个问题。首先,将来可能会引发异常中止错误,在这种情况下,您需要向catchMap
调用中添加next.respond(to:)
来捕获这种情况。
它也可能不会抛出(尽管这不太可能),因此您可以尝试展开响应并检查状态代码。
您是否已设置断点以查看是否击中了断点等?