我收到以下错误
panic: interface conversion: interface {} is float64, not int64
Run Code Online (Sandbox Code Playgroud)
我不确定 float64 来自哪里 我已将类型设置为 int64 但不确定 float64 来自哪里
type AccessDetails struct {
AccessUuid string `json:"access_uuid"`
Email string `json:"email"`
Refresh int64 `json:"refresh"`
Expiry int64 `json:"expiry"`
Permission string `json:"permission"`
Scope string `json:"scope"`
}
func GetAccessDetails(c *fiber.Ctx) (*AccessDetails, error) {
ad := &AccessDetails{}
cookie := c.Cookies("access_token")
var err error
token, err := jwt.Parse(cookie, func(token *jwt.Token) (interface{}, error) {
return []byte(os.Getenv("ACCESS_SECRET")), nil
})
if err != nil {
return nil, err
}
payload := …
Run Code Online (Sandbox Code Playgroud) 23:28:45 | 200 | 20.294s | 127.0.0.1 | GET | /api/user/cart/product/all
Run Code Online (Sandbox Code Playgroud)
从购物车产品中,我检索带有购物车产品的购物车。尽管购物车只有一辆购物车和一种产品。但检索起来需要太多时间。
var cart model.Cart
if err := model.DB.Select([]string{"id"}).Preload("CartProduct", func(db *gorm.DB) *gorm.DB {
return db.Select([]string{"cart_id", "id", "quantity", "seller_product_id", "seller_product_variation_id"})
}).Preload("CartProduct.SellerProduct", func(db *gorm.DB) *gorm.DB {
return db.Select([]string{"id", "name", "slug", "selling_price", "product_price", "offer_price", "offer_price_start", "offer_price_end", "quantity", "next_stock", "description"})
}).Preload("CartProduct.SellerProduct.SellerProductImage", func(db *gorm.DB) *gorm.DB {
return db.Select([]string{"image", "seller_product_id"}).Where("display = ?", true)
}).Preload("CartProduct.SellerProductVariation", func(db *gorm.DB) *gorm.DB {
return db.Select([]string{"id", "image", "product_price", "selling_price", "quantity", "seller_product_id"})
}).Preload("CartProduct.SellerProductVariation.SellerProductVariationValues", func(db *gorm.DB) *gorm.DB {
return db.Select([]string{"id", "name", "description", "attribute_id", "seller_product_variation_id"}) …
Run Code Online (Sandbox Code Playgroud) auth0 实现的中间件示例
func EnsureValidToken(next http.Handler) http.Handler {
// EnsureValidToken is a middleware that will check the validity of our JWT.
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
issuerURL, err := url.Parse("https://" + os.Getenv("AUTH0_DOMAIN") + "/")
if err != nil {
log.Fatalf("Failed to parse the issuer url: %v", err)
}
provider := jwks.NewCachingProvider(issuerURL, 5*time.Minute)
jwtValidator, err := …
Run Code Online (Sandbox Code Playgroud) 我在 go Fiber 中内置了一个 API。我正在尝试动态地将请求正文数据解析为键值对。
众所周知,光纤具有context.Body()
执行context.Bodyparser()
此操作的方法,但我找不到任何适当的示例来使用这些方法动态执行此操作。
例如:
func handler(c *fiber.Ctx) error {
req := c.Body()
fmt.Println(string(req))
return nil
}
Run Code Online (Sandbox Code Playgroud)
输出:
key=value&key2=value2&key3&value3
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是一个动态 json,例如:
key=value&key2=value2&key3&value3
Run Code Online (Sandbox Code Playgroud) 如果我将 JSON 数据发布到 gofiber 中的 /post route,我将如何读取和更改这些值:
{
"name" : "John Wick"
"email" : "johnw@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)
app.Post("/post", func(c *fiber.Ctx) error {
//read the req.body here
name := req.body.name
return c.SendString(name)
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个 API,如果大多数响应是这样的,我不知道如何返回空响应:
func GetEntityInstance(c *fiber.Ctx) error {
...
return c.Status(fiber.StatusCreated).JSON(fiber.Map{
"id_created": new_id,
})
}
Run Code Online (Sandbox Code Playgroud)
如何发送空正文响应?
例如,我试图确保发布请求的正文包含正文的准确结构,如果不是,则应抛出错误
例如我有以下功能
func UpdatePassword(c *fiber.Ctx) error {
type UpdatePasswordData struct {
Password string `json:"password" form:"password"`
NewPassword string `json:"new_password" form:"new_password"`
NewPasswordConfirm string `json:"new_password_confirm" form:"new_password_confirm"`
}
data := UpdatePasswordData{}
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
if data.NewPassword != data.NewPasswordConfirm {
c.Status(400)
return c.JSON(fiber.Map{
"message": "passwords do not match",
})
}
email, _ := middlewares.GetUserEmail(c)
newPassword := models.HashPassword(data.NewPassword)
database.DB.Model(&user).Select("Password").Where("email = ?", email).Updates(map[string]interface{}{"Password": newPassword})
return c.JSON(user)
}
Run Code Online (Sandbox Code Playgroud)
POST 请求应该寻找具有此结构的正文
{
"password": "oldpassword",
"new_password": "newpassword",
"new_password_confirm": "newpassword", …
Run Code Online (Sandbox Code Playgroud) 当我收到post
包含要上传到服务器的文件列表的请求时,如果我通过以下方式知道该文件的名称,我可以获取特定文件
c.FormFile("filename")
但是,如果不提前知道文件名,我将如何迭代该列表中的文件呢?我没有看到context
文档中列出的仅提供文件列表的方法。
我正在使用 golang 光纤服务器,设置如下:
package main
import (
"go-auth/database"
"go-auth/routes"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
func main() {
database.Connect()
app := fiber.New()
routes.Setup(app)
app.Use(cors.New(cors.Config{
AllowHeaders: "Origin, Content-Type, Accept, Content-Length, Accept-Language, Accept-Encoding, Connection, Access-Control-Allow-Origin",
AllowOrigins: "*",
AllowCredentials: true,
AllowMethods: "GET,POST,HEAD,PUT,DELETE,PATCH,OPTIONS",
}))
app.Listen(":3800")
}
Run Code Online (Sandbox Code Playgroud)
我通过 React fetch 调用它:
const response = await fetch('http://127.0.0.1:3800/api/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name,
email,
password
})
}).then(response => response.json());
console.log(response);
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?服务器端已禁用 CORS。这是我得到的错误:
Access to fetch at 'http://127.0.0.1:3800/api/register' from origin 'http://localhost:3000' has been blocked by …
Run Code Online (Sandbox Code Playgroud) 我加入 Gophers 团队已经几周了。到目前为止,一切都很好。我开始了一个新项目,使用Fiber Web 框架来构建后端 API。
我使用MongoDB作为我的数据库。
数据库/db.go
package database
import (
"context"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
var DB *mongo.Database
// InitMongo : Initialize mongodb...
func connectToMongo() {
log.Printf("Initializing database")
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
log.Fatal("Could not able to connect to the database, Reason:", err)
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
err = client.Connect(ctx)
if err != nil {
log.Fatal("Context error, mongoDB:", err)
}
//Cancel context to avoid memory leak
defer …
Run Code Online (Sandbox Code Playgroud)