【问题标题】:User findOne is returning nil but data is present in Go fiber Go Mongo用户 findOne 返回 nil 但数据存在于 Go fiber Go Mongo 中
【发布时间】:2022-12-21 20:17:21
【问题描述】:

我遇到了一个问题,我试图通过这样做来获取用户详细信息

err := userCollection.FindOne(ctx, bson.M{"email": input.Email}).Decode(&input)

在我的用户控制器中,但它返回 nil。我有一个 mongo.ErrNoDocuments 支票,但它仍然传递给 nil 支票并且什么都不返回,但我有一个具有相同电子邮件 ID 的用户。我的 userController 看起来像这样。

func SignInUser(c *fiber.Ctx) error {
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    var input models.User
    defer cancel()

    if err := c.BodyParser(&input); err != nil {
        return c.Status(http.StatusBadRequest).JSON(responses.UserResponse{Status: http.StatusBadRequest, Message: "error", Data: &fiber.Map{"data": err.Error()}})
    }

    input.Email = util.NormalizeEmail(input.Email)
    fmt.Println("received data", input.Email)
    err := userCollection.FindOne(ctx, bson.M{"email": input.Email}).Decode(&input)

    if err == mongo.ErrNoDocuments {
        fmt.Println("User not found>>>")
    } else if err == nil {
        fmt.Println("err")
    }
    return c.Status(http.StatusNotFound).JSON(responses.UserResponse{
        Status:  http.StatusNotFound,
        Message: "Account not found",
        Data: &fiber.Map{
            "data": "No Account belongs to given credentials"}})
}

任何帮助表示赞赏。提前致谢

【问题讨论】:

  • 你的问题是什么?你说你没有得到任何错误,但仍然没有得到任何文件?你比较errnil,你应该使用不等式:err != nil。此外,您不向用户发回input,为什么结果会包含任何内容?
  • 我正在测试它是否会变成 nil ,它会变成 nil 。
  • 好的,所以errnil,但您仍然将文档解码为input,但您没有在响应中发送input。那为什么客户端会看到input的值呢?
  • 那么在给定条件下获取用户数据的最佳方法是什么,我实际上是新手

标签: go mongodb-query go-fiber


【解决方案1】:

您应该在函数结束时返回您的用户模型:

return c.JSON(fiber.Map{"status": "success", "message": "User found", "data": input})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2018-11-14
    • 1970-01-01
    • 2020-07-25
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多