Swift - Return Vapor 3 请求中的 POST 字符串
Swift - Return a string in a POST request with Vapor 3
我遇到一个问题,用户需要通过 POST 请求 post 新订单。服务器需要 return 一个订单的 ID,以便前端代码可以检查订单是否被接受。我该怎么做?
这是我的代码:
router.post("postNewOrder") { req -> Future<HTTPStatus> in
print(req)
return try req.content.decode(OrderRequest.self).map(to: HTTPStatus.self) { orderRequest in
print("latitude: \(orderRequest.latitude), longitude:\(orderRequest.longitude)")
let newOrder = Order()
newOrder.latitude = orderRequest.latitude
newOrder.longitude = orderRequest.longitude
orders.append(newOrder)
return "1234abcd"
}
}
提前致谢:)
首先将 return 类型更改为 Future<String>
然后,如果您不使用任何数据库,而只使用一些 orders
数组
router.post("postNewOrder") { req -> Future<String> in
return try req.content.decode(OrderRequest.self).map { orderRequest in
let newOrder = Order()
newOrder.latitude = orderRequest.latitude
newOrder.longitude = orderRequest.longitude
orders.append(newOrder)
return "\(newOrder.id)"
// if id is String then simply
// return newOrder.id
// if id is UUID then this way
// return newOrder.id.uuidString
}
}
或者如果您使用 Fluent
那么您必须将新订单保存到数据库中
router.post("postNewOrder") { req -> Future<String> in
return try req.content.decode(OrderRequest.self).flatMap { orderRequest in
let newOrder = Order()
newOrder.latitude = orderRequest.latitude
newOrder.longitude = orderRequest.longitude
return newOrder.create(on: req).map { newOrder in
return "\(newOrder.requireID())"
// if id is String then simply
// return newOrder.id
// if id is UUID then this way
// return newOrder.requireID().uuidString
}
}
}
您还可以将 return 类型更改为 Int
或 UUID
,具体取决于您用于 \Order.id
的类型
你也可以return像这样的结构
struct NewOrderResponse: Content {
let id: UUID // or String, Int, etc.
}
我遇到一个问题,用户需要通过 POST 请求 post 新订单。服务器需要 return 一个订单的 ID,以便前端代码可以检查订单是否被接受。我该怎么做?
这是我的代码:
router.post("postNewOrder") { req -> Future<HTTPStatus> in
print(req)
return try req.content.decode(OrderRequest.self).map(to: HTTPStatus.self) { orderRequest in
print("latitude: \(orderRequest.latitude), longitude:\(orderRequest.longitude)")
let newOrder = Order()
newOrder.latitude = orderRequest.latitude
newOrder.longitude = orderRequest.longitude
orders.append(newOrder)
return "1234abcd"
}
}
提前致谢:)
首先将 return 类型更改为 Future<String>
然后,如果您不使用任何数据库,而只使用一些 orders
数组
router.post("postNewOrder") { req -> Future<String> in
return try req.content.decode(OrderRequest.self).map { orderRequest in
let newOrder = Order()
newOrder.latitude = orderRequest.latitude
newOrder.longitude = orderRequest.longitude
orders.append(newOrder)
return "\(newOrder.id)"
// if id is String then simply
// return newOrder.id
// if id is UUID then this way
// return newOrder.id.uuidString
}
}
或者如果您使用 Fluent
那么您必须将新订单保存到数据库中
router.post("postNewOrder") { req -> Future<String> in
return try req.content.decode(OrderRequest.self).flatMap { orderRequest in
let newOrder = Order()
newOrder.latitude = orderRequest.latitude
newOrder.longitude = orderRequest.longitude
return newOrder.create(on: req).map { newOrder in
return "\(newOrder.requireID())"
// if id is String then simply
// return newOrder.id
// if id is UUID then this way
// return newOrder.requireID().uuidString
}
}
}
您还可以将 return 类型更改为 Int
或 UUID
,具体取决于您用于 \Order.id
你也可以return像这样的结构
struct NewOrderResponse: Content {
let id: UUID // or String, Int, etc.
}