我正在try 将文档插入到MongoDB中,但尽管成功连接到Mongo,我仍然收到以下错误:
http: panic serving 172.27.0.8:40176: runtime error: invalid memory address or nil pointer dereference
我的Main.Go我正在初始化一个数据库连接,如下所示
func main(){
//Connect to mongo
mongoClient,err:=connectToMongo()
if err!=nil{
log.Panic(err)
}
client=mongoClient
//Create a context that mongo needs in order to disconnect
ctx,_:=context.WithTimeout(context.Background(), 15*time.Second)
// ctx,cancel:=context.WithTimeout(context.Background(), 15*time.Second)
//defer cancel()
//close connection
defer func () {
if err =client.Disconnect(ctx); err!=nil{
panic(err)
}
}()
muxRouter := mux.NewRouter().StrictSlash(true)
//specify who's allowed to connect
c:=cors.New(cors.Options{
AllowedOrigins: []string{"https://*", "http://*"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"},
ExposedHeaders: []string{"Link"},
AllowCredentials: true,
MaxAge: 300,
})
router := AddRoutes(muxRouter)
handler := c.Handler(router)
log.Println("Service stratring at o port ",webPort)
sterr := http.ListenAndServe(":9090", handler) //Uncomment this line when using docker
if sterr != nil {
log.Fatal("error starting http server :: ", err)
return
}
log.Println("Service started at port ",webPort)
}
func connectToMongo()(*mongo.Client,error){
mongoUsername := os.Getenv("MONGOUSERNAME")
mongoPassword := os.Getenv("MONGOPASSWORD")
//create connection options
clientOptions:=options.Client().ApplyURI(mongoURL)
clientOptions.SetAuth(options.Credential{
Username: mongoUsername,
Password: mongoPassword,
})
//connect
c,err:=mongo.Connect(context.TODO(),clientOptions)
if err!=nil{
log.Println("Error connecting to mongo",err)
return nil,err
}
log.Println("Connected to mongo")
return c,nil
}
在一个单独的文件中,Models.go是我try 将数据插入数据库的位置,如下所示:
var client *mongo.Client
func Insert(entry LogEntry)error{
log.Printf("Attempting to insert %s", entry)
log.Printf("client s %s", client)
//db:=client.Database("logs")
//log.Printf("database is %s", db)
collection:=client.Database("logs").Collection("logsCollection")
log.Printf("collection is %s", collection)
_,err :=collection.InsertOne(context.TODO(), LogEntry{
Name: entry.Name,
Data: entry.Data,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
})
if err!=nil{
log.Println("Error inserting new record into logs collection",err)
return err
}
log.Println("insert successful")
return nil
}
有谁能发现我做错了什么吗?