Что такое контекст в makeNode(in: Context) пар 3?

Использование Vapor для возврата модели в узел:

 func indexView(request: Request) throws -> ResponseRepresentable
    {
        let acro = try Acronym.makeQuery().sort(Acronym.idKey, .ascending)

        return try acro.all().makeNode(in: <#T##Context?#>)
    }

Он всегда возвращает ошибку и не знает, как ее исправить.

2 ответа

Решение

Контексты обычно используются для передачи информации о текущем использовании внутри Vapor. Документация по Vapor 3, по-видимому, не содержит подробной информации (пока), но см. https://docs.vapor.codes/2.0/node/getting-started/ для Vapor 2. Я никогда не обнаруживал в них необходимости в makeNode, итак выкладываю:

return try acro.all().makeNode(in:nil)

должно заставить это работать.

Узел был свернут в Vapor3. В этом нет необходимости, поскольку он опирается на собственные типы данных Swift + протоколы. В этом случае Vapor 3 использует Content для работы с JSON. (Контент соответствует Codable по умолчанию)

например

final class Person: Content, MySQLModel, Migration {
    var id: Int?
    var name: String

    init(id: Int? = nil, name: String) {
        self.id = id
        self.name = name
    }

}

func person(_ req: Request) throws -> Future<Person> {
    return Person(name: "Mark")
}

router.get("test") { req -> Future<[Person]> in
    return try Person.query(on: req).sort(\.id, .ascending).all()
}

Выдержка из документов:

В Vapor 3 все типы контента (JSON, protobuf, URLEncodedForm, Multipart и т. Д.) Обрабатываются одинаково. Все, что вам нужно для анализа и сериализации контента - это класс или структура Codable.

Другие вопросы по тегам