CouchDB 客户端

Vapor 4

Build on macOS Build on Ubuntu Test on Ubuntu

这是一个简单的库,用于在 Swift 中使用 CouchDB。

这个库唯一的依赖项是 async-http-client

文档

您可以在这里找到文档、示例,甚至教程。

安装

Swift Package Manager

添加到你的 Package.swift 文件的 dependencies 键值中。

dependencies: [
    .package(url: "https://github.com/makoni/couchdb-vapor.git", from: "1.6.0"),
]

初始化

// use default params
let myClient = CouchDBClient()

// provide your own params
let couchDBClient = CouchDBClient(
    couchProtocol: .http,
    couchHost: "127.0.0.1",
    couchPort: 5984,
    userName: "admin",
    userPassword: "myPassword"
)

如果您不想在代码中包含密码,可以在命令行中传递 COUCHDB_PASS 参数。 例如,您可以运行你的服务器端 Swift 项目

COUCHDB_PASS=myPassword /path/.build/x86_64-unknown-linux-gnu/release/Run

只需使用没有 userPassword 参数的初始化器

let couchDBClient = CouchDBClient(
    couchProtocol: .http,
    couchHost: "127.0.0.1",
    couchPort: 5984,
    userName: "admin"
)

用法示例

定义你的文档模型

// Example struct
struct ExpectedDoc: CouchDBRepresentable {
    var name: String
    var _id: String?
    var _rev: String?
}

插入数据

var testDoc = ExpectedDoc(name: "My name")

try await couchDBClient.insert(
    dbName: "databaseName",
    doc: &testDoc
)

print(testDoc) // testDoc has _id and _rev values now

更新数据

// get data from a database by document ID
var doc: ExpectedDoc = try await couchDBClient.get(fromDB: "databaseName", uri: "documentId")
print(doc)

// Update value
doc.name = "Updated name"

try await couchDBClient.update(
    dbName: testsDB,
    doc: &doc
)

print(doc) // doc will have updated name and _rev values now

删除数据

let response = try await couchDBClient.delete(fromDb: "databaseName", doc: doc)
// or by uri
let response = try await couchDBClient.delete(fromDb: "databaseName", uri: doc._id,rev: doc._rev)

获取所有数据库示例

let dbs = try await couchDBClient.getAllDBs()
print(dbs)
// prints: ["_global_changes", "_replicator", "_users", "yourDBname"]

通过选择器查找数据库中的文档

let selector = ["selector": ["name": "Sam"]]
let docs: [ExpectedDoc] = try await couchDBClient.find(in: "databaseName", selector: selector)
print(docs)

与 Vapor 一起使用

这是一个简单的 Vapor 教程