1

请在将 mongodb 连接到我的 ktor 应用程序方面需要帮助。这是我拥有的代码,如本文所述:https ://himanshoe.com/mongodb-in-ktor

class MongoDataHandler {

val client = KMongo.createClient().coroutine
val database = client.getDatabase("dev")
val userCollection = database.getCollection<User>()

suspend fun adduser(email: String, username: String, password: String): User? {
userCollection.insertOne(User(userId = null, email = email, userName = username, passwordHash = password))
return userCollection.findOne(User::email eq email )
}
suspend fun finduser(id: String): User?{
return userCollection.findOneById(id)
}
}

我按照他们网站的指示安装了 mongodb。成功安装后,mongodb 将作为服务启动。我运行这个命令“C:\Program Files\MongoDB\Server\5.0\bin\mongo.exe”来使用 mongodb。当我使用“show dbs”检查可用的数据库时,我意识到我的数据库(dev)没有列出。这是正在使用的依赖项:

implementation("org.litote.kmongo:kmongo-coroutine:4.2.8")

这是我得到的错误:

[eventLoopGroupProxy-4-1] INFO  Application - 500 Internal Server Error: 
POST - /user

我想我做错了什么......在此先感谢

4

2 回答 2

1

尝试使用该 MongoClients.create()方法将您的 MongoDataHandler 更改为以下内容,并将 codecRegistry 添加到您的客户端。

如果您使用具有默认设置的本地连接,则不需要连接字符串设置:

class MongoDataHandler {
    private val database: MongoDatabase
    private val usersCollection: MongoCollection<User>

    init {
        val pojoCodecRegistry: CodecRegistry = fromProviders(
            PojoCodecProvider.builder()
                .automatic(true)
                .build()
        )

        val codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), pojoCodecRegistry)
        val settings: MongoClientSettings = MongoClientSettings.builder()
//            .applyConnectionString("localhost") => add the connection string if not using localhost
            .codecRegistry(codecRegistry)
            .build()

        val mongoClient = MongoClients.create(settings)
        database = mongoClient.getDatabase("dev")
        usersCollection = database.getCollection(User::class.java.name, User::class.java)

    }

此外,如果您不使用 docker,请尝试使用 docker-compose 来编排您的 mongodb 容器:

version: '3'
services:
  mongo:
    image: mongo:latest
    ports:
      - "27017:27017"

如果您想使用 Ktor/MongoDB 运行示例,请查看此项目

于 2021-09-14T02:05:45.183 回答
0

我假设您处于开发模式并在我们的本地计算机上尝试此操作。

确保您在本地机器上安装了 MongoDB,并且本地服务器运行良好。是 ubuntu 的指南。

成功设置和安装 MongoDB 后,运行此命令
mongo --eval 'db.runCommand({ connectionStatus: 1 })'

输出应包含如下一行:
connecting to : mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

确保在创建客户端时添加此行,ConnectionString例如:\

private val client = KMongo.createClient(
    ConnectionString("mongodb://127.0.0.1:27017")
).coroutine

然后尝试使用 Ktor 处理您的请求/操作,它应该可以正常工作。

于 2021-10-20T15:17:57.420 回答