如何为 vapor web 框架编写中间件?
How do I write a middleware for vapor web framework?
使用工具箱命令创建了一个新项目:vapor new projectname
在main.swift文件中我添加了中间件代码:
import Vapor
import HTTP
final class VersionMiddleware: Middleware {
func respond(to request: Request, chainingTo next: Responder) throws -> Response {
let response = try next.respond(to: request)
response.headers["Version"] = "API v1.0"
print("not printing")
return response
}
}
let drop = Droplet(availableMiddleware: [
"version": VersionMiddleware()
])
drop.get("hello") {
req in
return "Hello world"
}
drop.run()
但是当我 运行 这个时,它打印 "hello world" 但 API 版本没有添加到 headers。我正在使用邮递员检查它。
我认为你应该配置 Config/middleware.json
{
"server": [
...
"version"
],
...
}
会成功的。
Vapor 1 ➙ 2 Migration Note: "middleware" ordering configuration has moved from Config/middleware.json to Config/droplet.json.
蒸汽 2
在Vapor 2中,可以按如下方式创建、添加和配置中间件:
Sources/App/Middleware/ExampleMiddleware.swift
final class ExampleMiddleware: Middleware {
func respond(to request: Request, chainingTo next: Responder) throws -> Response {
// if needed, process inbound `request` here.
// Swift.print(request.description)
// pass next inbound `request` to next middleware in processing chain
let response: Response = try next.respond(to: request)
// if needed, process outbound `response` here
// Swift.print(response.description)
// return `response` to chain back up any remaining middleware to client
return response
}
}
Sources/App/Setup/Config+Setup.swift
extension Config {
public func setup() throws {
…
try setupMiddleware()
…
}
public func setupMiddleware() throws {
self.addConfigurable(
middleware: ExampleMiddleware(),
name: "example"
)
}
}
Config/droplet.json
"middleware": [
…,
"example"
],
注意:直接包含在Vapor 2中的中间件(如"error"、"sessions"、"file"、"date"、"cors")将用于Config/droplet.json
"middleware"
没有 addConfigurable(middleware, name)
设置步骤。
使用工具箱命令创建了一个新项目:vapor new projectname
在main.swift文件中我添加了中间件代码:
import Vapor
import HTTP
final class VersionMiddleware: Middleware {
func respond(to request: Request, chainingTo next: Responder) throws -> Response {
let response = try next.respond(to: request)
response.headers["Version"] = "API v1.0"
print("not printing")
return response
}
}
let drop = Droplet(availableMiddleware: [
"version": VersionMiddleware()
])
drop.get("hello") {
req in
return "Hello world"
}
drop.run()
但是当我 运行 这个时,它打印 "hello world" 但 API 版本没有添加到 headers。我正在使用邮递员检查它。
我认为你应该配置 Config/middleware.json
{
"server": [
...
"version"
],
...
}
会成功的。
Vapor 1 ➙ 2 Migration Note: "middleware" ordering configuration has moved from Config/middleware.json to Config/droplet.json.
蒸汽 2
在Vapor 2中,可以按如下方式创建、添加和配置中间件:
Sources/App/Middleware/ExampleMiddleware.swift
final class ExampleMiddleware: Middleware {
func respond(to request: Request, chainingTo next: Responder) throws -> Response {
// if needed, process inbound `request` here.
// Swift.print(request.description)
// pass next inbound `request` to next middleware in processing chain
let response: Response = try next.respond(to: request)
// if needed, process outbound `response` here
// Swift.print(response.description)
// return `response` to chain back up any remaining middleware to client
return response
}
}
Sources/App/Setup/Config+Setup.swift
extension Config {
public func setup() throws {
…
try setupMiddleware()
…
}
public func setupMiddleware() throws {
self.addConfigurable(
middleware: ExampleMiddleware(),
name: "example"
)
}
}
Config/droplet.json
"middleware": [
…,
"example"
],
注意:直接包含在Vapor 2中的中间件(如"error"、"sessions"、"file"、"date"、"cors")将用于Config/droplet.json
"middleware"
没有 addConfigurable(middleware, name)
设置步骤。