在Vapor 3上使用了大量的教程,我没有弄清楚如何编辑输出JSON,以获得特定的用户对象我创建路径:
protectedRouter.get("users", User.parameter, use: userController.user)
Run Code Online (Sandbox Code Playgroud)
方法在UserController:
func user(_ req: Request) throws -> Future<User> {
return try req.parameters.next(User.self)
}
Run Code Online (Sandbox Code Playgroud)
当然,它会发送User对象内的所有内容,包括电子邮件和散列密码.大.我怎么能避免这个?我的意思是我只想发送有关用户的公共信息(姓名,昵称,身份证等).
创建一个表示所需输出结构的单独结构.使结构符合Content.每当您返回用户时,首先将其转换为该结构.为了方便起见,为用户添加扩展名是很好的.
一种常见的模式是将此结构嵌套在模型中,将其称为Public.即
extension User {
struct Public: Content { ... }
func makePublic() -> Public { ... }
}
Run Code Online (Sandbox Code Playgroud)
然后您的路线将返回User.Public而不是User.请注意,此模式在反向中也很有用,可为用户创建单独的"输入"表示.
您可以在Vapor的文档中了解更多相关信息,包括Vapor→内容→动态属性.