Отправка тела form-data / application/x-www-form-urlencoded для HTTP POST-запроса OpenWhisk/Kitura Swift

Я работаю над использованием среды IBM Cloud Bluemix с их версией Kitura для реализации Swift на стороне сервера. Конечно, ключом к этому является возможность делать все виды HTTP-запросов. До сих пор я мог обрабатывать запросы GET и POST с чистым телом JSON. Я застрял, когда дело доходит до данных формы или приложения/x-www-form-urlencoded. Из того, что я прочитал, кажется, что мне следует использовать предоставленный Китурой класс BodyParser, но я боюсь, что даже не знаю, как на самом деле использовать его в коде. Я в основном использовал следующие очень полезные посты, чтобы дойти до сих пор. От Роба Аллена От Horea Porutiu От Кевина Хойта

Насколько я понимаю, теперь мне нужно будет использовать классы BodyParser и Router из Kitura, но мне кажется, что htose уже позаботились о реализации IBM Cloud Function OpenWhisk + Kitura Swift... так что я не слишком конечно сейчас...

Любая идея или указатель? Спасибо


person Laurent Ades    schedule 16.01.2018    source источник


Ответы (2)


Вы можете использовать request.readString() для чтения информации о теле в необработанном формате.

Если у вас есть промежуточное ПО BodyParser, использующее:

router.all("/name", middleware: BodyParser())

Затем вы можете использовать это для urlencoded тел:

router.post("/name") { request, response, next in
    guard let parsedBody = request.body else {
        next()
        return
    }

    switch parsedBody {
        case .urlEncoded(let data):
            let name = data["name"].string ?? ""
            try response.send("Hello \(name)").end()
        default:
            break
    }
    next()
}

Где data - словарь [String:String].

person Rob Allen    schedule 16.01.2018

Хорошо, я ответил на свой вопрос, поняв, что Китура и Китура-Нет - это две разные вещи. Все это обрабатывает класс ClientRequest в Kitura-Net. Все здесь

person Laurent Ades    schedule 16.01.2018