【发布时间】:2021-01-08 06:09:18
【问题描述】:
我的代码中有两个简单的 api 方法。端点/api/user/create 的方法创建用户。字段 username 是唯一的。当我尝试使用数据库中已存在的相同用户名创建用户时,控制台中出现错误:
(/home/andrej/go/src/go_contacts/models/users.go:19)
[2020-12-23 22:03:10] pq: duplicate key value violates unique constraint "users_username_key"
我想显示此错误以响应用户,或者以某种方式识别我的代码中的错误类型,以便为用户显示不同的错误消息。我只知道如果我有错误user 返回我 id=0。但这对用户来说似乎不是一个好消息。
main.go
package main
import (
"fmt"
"go_contacts/controllers"
"net/http"
"os"
"github.com/gorilla/mux"
"github.com/joho/godotenv"
)
func main() {
godotenv.Load(".env")
router := mux.NewRouter()
router.HandleFunc("/", controllers.ReturnHello).Methods("GET")
router.HandleFunc("/api/user/create", controllers.CreateUser).Methods("POST")
port := os.Getenv("PORT")
if port == "" {
port = "8000"
}
err := http.ListenAndServe(":"+port, router)
if err != nil {
fmt.Print(err)
}
}
models.go 带有用户结构:
package models
import (
u "go_contacts/utils"
"github.com/jinzhu/gorm"
)
// User base model
type User struct {
gorm.Model
Username string `json:"username" gorm:"unique"`
Password string `json:"password"`
Email string `json:"email"`
}
// Create new user
func (user *User) Create() map[string]interface{} {
GetDB().Create(user)
if user.ID <= 0 {
return u.Message(false, "Failed to create user, connection error.")
}
response := u.Message(true, "Account has been created")
response["user"] = user
return response
}
【问题讨论】:
-
@Brits 谢谢。正是我要找的
标签: postgresql go go-gorm