第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在另一個(gè)函數(shù)中使用已連接到我的 mongodb 和集合的句柄?

如何在另一個(gè)函數(shù)中使用已連接到我的 mongodb 和集合的句柄?

Go
一只萌萌小番薯 2022-10-17 19:16:15
我有一個(gè)我在 mongo 上設(shè)置的數(shù)據(jù)庫(kù),其中包含一些我需要通過(guò)端點(diǎn)的 url 參數(shù)查詢的數(shù)據(jù)。為了使用這個(gè)庫(kù),我定義了一些句柄,并在一個(gè)單獨(dú)的setup()函數(shù)中完成了數(shù)據(jù)庫(kù)連接的整個(gè)設(shè)置,但是我不能在它之外使用我需要的句柄。package mainimport (    "context"    "encoding/json"    "fmt"    "log"    "net/http"    "time"    "github.com/gorilla/mux"    "go.mongodb.org/mongo-driver/mongo"    "go.mongodb.org/mongo-driver/mongo/options"    "go.mongodb.org/mongo-driver/mongo/readpref")func setup() {    clientOptions := options.Client().        ApplyURI("mongodb+srv://<username>:<password>@cluster0.um5qb.mongodb.net/<db>?retryWrites=true&w=majority")    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)    defer cancel()    client, err := mongo.Connect(ctx, clientOptions)    if err != nil {        log.Fatal(err)    }    err = client.Ping(ctx, readpref.Primary())    if err != nil {        log.Fatal(err)    }    defer client.Disconnect(ctx)    // DB := client.Database("cities-nighthack")    // Cities := DB.Collection("city")}// model for user endpointtype User struct {    Email string `json:"email"`}// fake db to temp store usersvar users []User// checks if json is empty or notfunc (u *User) IsEmpty() bool {    return u.Email == ""}type App struct {    Mongo *mongo.Client}func main() {    setup()    r := mux.NewRouter()    r.HandleFunc("/user", createUser).Methods("POST")    // r.HandleFunc("/suggest?city_name={city}", searchCity).Methods("GET")    fmt.Println("Server running at port 8080")    log.Fatal(http.ListenAndServe(":8080", r))}func createUser(w http.ResponseWriter, r *http.Request) {    w.Header().Set("Content-Type", "application/json")    if r.Body == nil {        json.NewEncoder(w).Encode("Must send data")    }但是, gmux 不允許您這樣做,因?yàn)樗[式傳入http.ResponseWriter和 a *http.Request。因此,任何輸入都不能在參數(shù)中。我嘗試在全球范圍內(nèi)聲明它們,但沒(méi)有奏效,建議不要這樣做。有人告訴我我可以嘗試使用閉包或結(jié)構(gòu)來(lái)傳遞它,但我也不太明白我將如何去做。
查看完整描述

1 回答

?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊

一種方法是這樣,首先添加一個(gè)服務(wù)器類型


type server struct {

    router *mux.Router

    cities *mongo.Collection

}

將路由包裝器添加到服務(wù)器


func (s *server) routes() {

    s.router.HandleFunc("/base", s.handleIndex()).Methods("GET")

}

處理函數(shù)


func (s *server) handleIndex() http.HandlerFunc {

    return func(w http.ResponseWriter, r *http.Request) {

        cities := s.cities.Find(...) // something like that

        // write your response, etc

    }

}

然后在主


func main() {

    sr := &server{

        router: mux.NewRouter(),

        cities: getMongoDBCollection('cities') // implement this one :) should return a *mongo.Collection...

    }

    sr.routes()

...

}


查看完整回答
反對(duì) 回復(fù) 2022-10-17
  • 1 回答
  • 0 關(guān)注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)