Cara menghantar permintaan yang betul kepada API menggunakan Dio/Flutter (frontend) dan Go (backend)

WBOY
Lepaskan: 2024-02-10 10:48:09
ke hadapan
1138 orang telah melayarinya

如何使用 Dio/Flutter(前端)和 Go(后端)向 API 发送正确的请求

editor php Yuzai membawakan anda panduan tentang menggunakan Dio/Flutter (bahagian hadapan) dan Go (bahagian belakang) untuk menghantar permintaan yang betul kepada API. Semasa proses pembangunan, berinteraksi dengan API adalah tugas yang tidak dapat dielakkan. Walau bagaimanapun, memastikan ketepatan dan kesahihan permintaan bukanlah mudah. Artikel ini akan memperkenalkan anda secara terperinci cara menggunakan Dio/Flutter dan Go untuk menghantar permintaan yang betul, menjadikan pembangunan anda berfungsi dengan lebih lancar dan cekap. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberi anda panduan dan petua yang berharga. Mari kita meneroka bersama-sama!

Kandungan soalan

Saya sedang menguji ini dalam Android Studio sekarang. Berikut ialah kod Go yang saya cuba gunakan dalam bahagian hadapan Flutter:

func Login(c *gin.Context) {
    //  Get email and password off of req body
    var body struct {
        Email    string
        Password string
    }

    if c.Bind(&body) != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": "Failed to read body",
        })

        return
    }

    var user models.User
    if user.ID == 0 {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": "Invalid email and/or password",
        })
        return
    }

    // Lookup user by email, including records where deleted_at is NULL
    if err := initializers.DB.Where("email = ? AND deleted_at IS NULL", body.Email).First(&user).Error; err != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": "Invalid email and/or password",
        })
        return
    }

    //  Compare passwords
    err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(body.Password))
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": "Invalid email and/or password",
        })
        return
    }

    //  Generate JWT Token
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "sub": user.ID,
        "exp": time.Now().Add(time.Hour * 24 * 30).Unix(),
    })
    tokenString, err := token.SignedString([]byte(os.Getenv("SECRET")))

    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": "Failed to create token",
        })
        return
    }

    //  Send back
    c.SetSameSite(http.SameSiteLaxMode)
    c.SetCookie("AuthZ", tokenString, 3600*24*30, "", "", false, true)

    c.JSON(http.StatusOK, gin.H{})
}

//main,go

    r.POST("/login", controllers.Login)
Salin selepas log masuk

Saya terus mendapat 400 kod ralat dan saya cuba menganalisis sebabnya. Begini cara saya menghantar permintaan:

void postLogin(String email, String password) async {
  Response response;
  response = await _dio.post('$baseUrl/login', data: {
    'email': email,
    'password': password,
  });
}

...

try {
                          postLogin(
                              emailController.text, passwordController.text);
                          print('Login successful');
                        } catch (error) {
                          print('Login failed: $error');
                          // Print Dio error message
                          if (error is DioError) {
                            print('Dio error message: ${error.message}');
                          }
                          setState(() {
                            errorText =
                                'Login failed. Please check your credentials.';
                          });
                        } finally {
                          setState(() {
                            isLoading = false;
                          });
                        }
Salin selepas log masuk

API berfungsi dalam Posman dan melalui kaedah ujian lain, tetapi tidak dalam Android Studio, sekurang-kurangnya bukan cara saya menggunakan Dio.

Terima kasih atas bantuan anda.

Penyelesaian

Ini kelihatan seperti masalah anda:

var user models.User
if user.ID == 0 {
    c.JSON(http.StatusBadRequest, gin.H{
        "error": "Invalid email and/or password",
    })
    return
}
Salin selepas log masuk

Anggap models.User 上的 ID 只是一个 int,默认始终为零!您可能想要加载用户,例如在检查 ID sebelum ini diperolehi daripada pangkalan data.

Atas ialah kandungan terperinci Cara menghantar permintaan yang betul kepada API menggunakan Dio/Flutter (frontend) dan Go (backend). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!