Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

Vapor 连接 MongoDB

$
0
0

最近在写一个小项目,来学习Vapor。我们在写后台的时候坑定避免不了要和数据库进行交互,最起码的数据库连接呀,什么增删查改呀之类的最基本的操作还是经常需要的。Vapor 在我看来是一个特别小清新的 Swift Server 库,总之就是喜欢。来看看Vapor 怎么和MongoDB进行连接然后进行一系列的操作的。

在这里呢,MongoDB的安装呀什么乱七八糟的步骤就不多说了。

Vapor 在和数据库进行连接的时候提供了多种方案。一种呢就是 Fluent Drivers 另外一种呢就是 Providers 。使用起来呢,两种好像差不太多。不过 Providers 方式呢需要我们把对应的插件来添加进来,而 Fluent 就不需要了,直接就在Vapor 库里面有,可以直接使用。两种呢都大概介绍一下吧

Mongo Provider

Add the package to your Package.swift.

.Package(url: "https://github.com/vapor/mongo-provider.git", majorVersion: 1, minor: 1)

然后在终端中运行一下, swift package generate-xcodeproj 再次打开项目就可以使用这个插件了。

Add the provider to your Droplet.

import Vapor import VaporMongo let drop = Droplet() try drop.addProvider(VaporMongo.Provider.self)

配置的话,可以直接使用代码来,也可以使用一个JSON 配置文件。在这里呢我就直接使用代码了

import Vapor import VaporMongo let drop = Droplet() let mongo = try VaporMongo.Provider(database: ..., user: ..., password: ...) drop.addProvider(mongo)

这样就可以和我们的数据库进行连接了。

Fluent Drivers

我还是比较喜欢这方式,因为不用去再引入插件了,可以直接使用了。

import Vapor import HTTP import FluentMongo let mongo = try MongoDriver(database: "chat", user: "root", password: "", host: "localhost", port: 27017) let db = Database(mongo) let drop = Droplet() drop.database = db

通过这种方式呢,我们需要给我们的 Droplet 对象的 database 属性赋值。通过这样来和我们的数据库进行连接,MongoDB是这个样子的,其他的数据库应该也是差不多的。

其实到这里呢,我们还什么都做不了呢。只是连接了数据库。接下来,我们来创建我们的数据库模型,以便于我们对数据库的各种操作。

Model

Model is the base protocol for any of your application's models, especially those you want to persist.

我们来创建一个最基本的 User Model

final class User { var name: String init(name: String) { self.name = name } }

然后我们在文件的顶部来引入我们需要的库

import Vapor import Fluent

我们让我们的类来继承 Model 这个协议。其实呢,这个协议又继承自很多个协议,每个协议又有自己的一些默认实现方法,使得我们的 Model 功能特别的强大,你可以去看看都继承自哪些协议,每个协议又都提供了什么方法。

final class User: Model { ... }

当你继承了 Model 协议之后呢,代码会提示错误。我们需要将一些协议方法或者属性给实现了。我先给出完整的代码,每一部分是刚什么用的你可以直接去看文档 Model 。

import Vapor import Fluent final class User: Model { var id: Node? var name: String init(name: String) { self.name = name } init(node: Node, in context: Context) throws { id = try node.extract("id") name = try node.extract("name") } func makeNode(context: Context) throws -> Node { return try Node(node: [ "id": id, "name": name ]) } static func prepare(_ database: Database) throws { try database.create("users") { users in users.id() users.string("name") } } static func revert(_ database: Database) throws { try database.delete("users") } }

如果本身数据库模型对应的表中没有存在,需要在模型中添加以下成员变量:

var exists: Bool = false;

在这里呢,我想重要说一点的就是,不论你是通过哪一种方式来进行和数据库的连接的,当你的模型创建好之后,必须在 Droplet 对象上来添加你的 Model ,否则的话你进行曾删查改的操作是没有用的。

let drop = Droplet() drop.preparations.append(User.self)

好了到这里你就可以愉快的进行数据库的各种增删查改的操作了。祝你好运


Viewing all articles
Browse latest Browse all 6262

Trending Articles