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 类型更改为 IntUUID,具体取决于您用于 \Order.id

的类型

你也可以return像这样的结构

struct NewOrderResponse: Content {
    let id: UUID // or String, Int, etc.
}