Обработка ошибок MongoDB в зависимости от ее типа - PullRequest
0 голосов
/ 16 марта 2020

Я получаю данные аккаунта, используя его идентификатор. В настоящее время, когда я делаю этот запрос, драйвер mon go - go выдает ошибку, и я хочу обработать эту ошибку по-разному, в зависимости от ее типа. Например, если документ не существует, я хочу вернуть 404, но давайте предположим, что экземпляр, содержащий мою mongodb, падает, в этом случае я хочу вернуть 500. Как я могу обработать тип ошибки:

func (dao MongoDAO) Get(ctx *gin.Context, filter bson.M, entity interface{}) error {
    context, _ := context.WithTimeout(context.Background(), 5*time.Second)
    if err := dao.Collection.FindOne(context, filter).Decode(entity); err != nil {
        return err
    }
    return nil
}

1 Ответ

1 голос
/ 16 марта 2020

Вы можете использовать переменные Error, определенные в документах mon go - go -driver (https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo?tab=doc#pkg -variables ). С этим вы можете сделать что-то вроде этого:

func (dao MongoDAO) Get(ctx *gin.Context, filter bson.M, entity interface{}) error {
    context, _ := context.WithTimeout(context.Background(), 5*time.Second)
    if err := dao.Collection.FindOne(context, filter).Decode(entity); err != nil {
        if err == mongo.ErrNoDocuments {
            // Return the 404
        }
        return err
    }
    return nil
}
...