This is my controller in fiber
func Register(c *fiber.Ctx) error {
user := new(User)
if err := c.BodyParser(user); err != nil {
return c.Status(400).JSON(fiber.Map{
"error": err.Error(),
})
}
if user.Username == "" || user.Password == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"error": "Bad request.",
"message": "Please include both username and password.",
})
}
query := `SELECT username FROM user WHERE username = $1`
res, err := db.Query(query, user.Username)
if err != nil {
return err
}
defer res.Close()
return c.JSON("hello")
}
But when i hit the endpoint i got
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x1 addr=0x20 pc=0x865db4]
goroutine 22 [running]:
database/sql.(*DB).conn(0x0, {0xbee8e0, 0xeee440}, 0x1)
C:/Program Files/Go/src/database/sql/sql.go:1282 +0x54
database/sql.(*DB).query(0x9?, {0xbee8e0, 0xeee440}, {0xb670d2, 0x2d}, {0xc00028fb08, 0x1, 0x1}, 0xc0?)
C:/Program Files/Go/src/database/sql/sql.go:1721 +0x57
database/sql.(*DB).QueryContext.func1(0x0?)
C:/Program Files/Go/src/database/sql/sql.go:1704 +0x4f
database/sql.(*DB).retry(0xc00002c440?, 0xc00028f9f0)
database/sql.(*DB).QueryContext(0xc00000ad18?, {0xbee8e0?, 0xeee440?}, {0xb670d2?, 0xc00000ac50?}, {0xc00028fb08?, 0xc0000a3af8?, 0x7cbfaf?})
C:/Program Files/Go/src/database/sql/sql.go:1703 +0xc5
database/sql.(*DB).Query(...)
C:/Program Files/Go/src/database/sql/sql.go:1717
example/backend/user.Register(0xc000004600)
C:/Users/me/Documents/hello/backend/user/user.go:35 +0x1e5
github.com/gofiber/fiber/v2.(*App).next(0xc00000c900, 0xc000004600)
C:/Users/me/go/pkg/mod/github.com/gofiber/fiber/v2@v2.48.0/router.go:144 +0x1b2
github.com/gofiber/fiber/v2.(*App).handler(0xc00000c900, 0x81622f?)
C:/Users/me/go/pkg/mod/github.com/gofiber/fiber/v2@v2.48.0/router.go:171 +0x78
github.com/valyala/fasthttp.(*Server).serveConn(0xc000160000, {0xbeff80?, 0xc00008e0c0})
C:/Users/me/go/pkg/mod/github.com/valyala/fasthttp@v1.48.0/server.go:2363 +0x11d4
github.com/valyala/fasthttp.(*workerPool).workerFunc(0xc0000d0140, 0xc000096320)
C:/Users/me/go/pkg/mod/github.com/valyala/fasthttp@v1.48.0/workerpool.go:224 +0xa4
github.com/valyala/fasthttp.(*workerPool).getCh.func1()
C:/Users/me/go/pkg/mod/github.com/valyala/fasthttp@v1.48.0/workerpool.go:196 +0x32
created by github.com/valyala/fasthttp.(*workerPool).getCh in goroutine 1
C:/Users/me/go/pkg/mod/github.com/valyala/fasthttp@v1.48.0/workerpool.go:195 +0x1ab
I have another endpoint that is not doing any query and it is working fine, so i don't think there is anything wrong with my connection to the db itself because at this point i'v ealready established a connection to it.
Here is my other endpoint
app.Get("/", func(c *fiber.Ctx) error {
return c.Status(fiber.StatusOK).JSON(fiber.Map{
"status": "OK.",
"message": "Service is up and running.",
})
})
Here is how i connect to postgre, any help would be appreciated
package config
import (
"database/sql"
"fmt"
"os"
"github.com/joho/godotenv"
_ "github.com/lib/pq"
)
var db *sql.DB
func PostgreInit() error {
// load env
if envErr := godotenv.Load(".env"); envErr != nil {
fmt.Println("Could not load .env")
os.Exit(1)
}
var (
DB_NAME = os.Getenv("DB_NAME")
DB_USER = os.Getenv("DB_USER")
DB_PASSWORD = os.Getenv("DB_PASSWORD")
DB_HOST = os.Getenv("DB_HOST")
DB_PORT = os.Getenv("DB_PORT")
)
// connect to db
var err error
connStr := fmt.Sprintf(
"postgres://%v:%v@%v:%v/%v?sslmode=disable",
DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME)
db, err = sql.Open("postgres", connStr)
if err != nil {
return err
}
if err = db.Ping(); err != nil {
return err
}
return nil
}