【发布时间】: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"}})
}
任何帮助表示赞赏。提前致谢
【问题讨论】:
-
你的问题是什么?你说你没有得到任何错误,但仍然没有得到任何文件?你比较
err和nil,你应该使用不等式:err != nil。此外,您不向用户发回input,为什么结果会包含任何内容? -
我正在测试它是否会变成 nil ,它会变成 nil 。
-
好的,所以
err是nil,但您仍然将文档解码为input,但您没有在响应中发送input。那为什么客户端会看到input的值呢? -
那么在给定条件下获取用户数据的最佳方法是什么,我实际上是新手
标签: go mongodb-query go-fiber