Что такое контекст в 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.