【问题标题】:Use Mongo DB with Vapor and Fluent使用带有 Vapor 和 Fluent 的 Mongodb
【发布时间】:2017-02-10 11:01:23
【问题描述】:

我为看起来像这样的用户制作了一个模型:

import Vapor
import Fluent
import Foundation

final class User: Model {

var id: Node?
var username: String
var name : String
var surename : String
var password : String
var credit : String
var isBlocked : String
var isAdmin : String

init(username: String, name: String, surename: String, password: String, credit: String, isBlocked: String, isAdmin: String) {
    self.id = UUID().uuidString.makeNode()
    self.username = username
    self.name = name
    self.surename = surename
    self.password = password
    self.credit = credit
    self.isBlocked = isBlocked
    self.isAdmin = isAdmin
}

init(node: Node, in context: Context) throws {
    id = try node.extract("_id")
    username = try node.extract("username")
    name = try node.extract("name")
    surename = try node.extract("surename")
    password = try node.extract("password")
    credit = try node.extract("credit")
    isBlocked = try node.extract("isBlocked")
    isAdmin = try node.extract("isAdmin")

}

func makeNode(context: Context) throws -> Node {
    return try Node(node: [
        "_id": id,
        "username": username,
        "name": name,
        "surename": surename,
        "password" : password,
        "credit" : credit,
        "isBlocked" : isBlocked,
        "isAdmin" : isAdmin
    ])
}
}

//extension User {
//    /**
//        This will automatically fetch from database, using example here to   load
//        automatically for example. Remove on real models.
//    */
//    public convenience init?(from string: String) throws {
//        self.init(content: string)
//    }
//}

extension User: Preparation {
static func prepare(_ database: Database) throws {
    try database.create("users") { users in
        users.id()
        users.string("username")
        users.string("name")
        users.string("surename")
        users.string("password")
        users.string("credit")
        users.string("isBlocked")
        users.string("isAdmin")
    }
}

static func revert(_ database: Database) throws {
    //
}
}

我尝试用这个创建一个新用户:

    var user = User(username: "Test", name: "Name", surename: "zuname", password: "1234", credit: "0.00", isBlocked: "false", isAdmin: "true")

    try user.save()
    print(user.id) // prints the new id

我可以构建和运行蒸汽。当我进入应该执行的路线时,我得到了这个错误:

未捕获的错误:EntityError.noDatabase。使用中间件捕获此错误并提供更好的响应。否则生产环境会返回500错误页面。

有人可以帮助我吗?

在哪里可以找到 Fluent with mongo 和 Vapor 的完整文档?

非常感谢!

【问题讨论】:

  • 嘿马塞尔,你准备好你的实体在你的液滴中了吗?

标签: mongodb fluent vapor


【解决方案1】:

EntityError.noDatabase 发生在模型不知道要使用哪个数据库时。

您有两种方法可以解决此问题。

User 类型显式设置数据库。

User.database = myDatabase

或者,传递User 类型作为Droplet 的准备。

let drop = Droplet(preparations: [User.self])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2017-10-08
    • 2021-03-27
    • 2020-11-16
    • 2017-08-17
    • 1970-01-01
    • 2018-11-27
    相关资源
    最近更新 更多