Как я должен переключаться на основе URL - PullRequest
0 голосов
/ 16 марта 2020

Это мой URL в Почтальоне: http://localhost:8000/filter?Name=Srinu

Я передаю строку запроса для извлечения записей из базы данных на основе запроса.

В моей базе данных есть Имя, Пол и Возраст, как мне написать оператор switch на основе приведенного ниже фрагмента кода, чтобы мне нужно было получать данные на основе моего запроса.

switch ? {
    case "Name":
        fiName := bson.D{{"Name", name}}
        err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiName).All(&json1)

        if err == nil {
            c.Writer.Header().Set("Content-Type", "application/json")
            c.JSON(201, &json1)
        } else {
            c.JSON(500, gin.H{"result": "An error occured"})
        }
    case "Gender":
        fiGender := bson.D{{"Gender", gender}}
        err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiGender).All(&json1)

        if err == nil {
            c.Writer.Header().Set("Content-Type", "application/json")
            c.JSON(201, &json1)
        } else {
            c.JSON(500, gin.H{"result": "An error occured"})
        }
    case "Age":
        fiAge := bson.D{{"Age", age}}
        err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiAge).All(&json1)

        if err == nil {
            c.Writer.Header().Set("Content-Type", "application/json")
            c.JSON(201, &json1)
        } else {
            c.JSON(500, gin.H{"result": "An error occured"})
        }
    }

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Используйте следующий код:

r := ctx.Request

r.ParseForm()
switch {
case len(r.Form["Name"]) > 0:
    name := r.Form["Name"][0]
    fiName := bson.D{{"Name", name}}
    err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiName).All(&json1)
    ...
}

Вызов r.ParseForm() устанавливает r.Form, используя данные, проанализированные в запросе.

Поле r.Form представляет собой карту срезов строк , Если в запросе присутствует параметр, тогда длина строки для параметра больше нуля.

Оператор name := r.Form["Name"][0] получает первое значение параметра для Name. Если запрос http://localhost:8000/filter?Name=Srinu&Name=Reflect, то второе значение Reflect игнорируется.

0 голосов
/ 16 марта 2020

Вы можете использовать URL , чтобы увидеть результаты, которые вы можете проверить

package main

import (
    "fmt"
    "net/url"
)

func main() {
    u, err := url.Parse("http://localhost:8000/filter?Name=Srinu")
    if err != nil {
        fmt.Println(err)
    }

    query :=u.RawQuery
    parsed, err := url.ParseQuery(query)

    if err != nil {
        fmt.Println(err)
    }

    switch true {
            case parsed.Get("Name") != "" :
            fmt.Println(parsed["Name"]) 
            case parsed.Get("Age") != "":
            fmt.Println(parsed["Age"])  
        default:
            return
    }

}
...