如何使用 Visual Studio Code 在 Go 中打印 Flutter 后端的 HTTP StatusCode?

问题描述 投票:0回答:2

我正在学习此 YouTube 视频中有关将 Go 后端与 Flutter 集成的教程。尽管严格遵循说明,我仍无法将数据从后端检索到我的 Flutter 应用程序中。本教程的作者建议使用

response.statusCode
打印 HTTP 状态代码来调试,但我不确定如何在 Go 中实现这一点。

背景:

我对 Go 比较陌生,正在开发一个涉及为 Flutter 应用程序设置后端服务的项目。目标是在 Flutter 前端和 Go 后端之间发送和接收数据。在测试时,我遇到了数据检索问题,建议我检查 HTTP 状态代码来诊断问题。

代码:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

type Tasks struct {
    ID         string `json:"id"`
    TaskName   string `json:"task_name"`
    TaskDetail string `json:"detail"`
    Date       string `json:"date"`
}

var tasks []Tasks

func allTasks() {
    // Code for initializing tasks omitted for brevity
}

func homePage(w http.ResponseWriter, r *http.Request) {
    fmt.Println("I am home page")
}

func getTasks(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(tasks)
}

// Other handlers omitted for brevity

func handleRoutes() {
    router := mux.NewRouter()
    // Routes setup omitted for brevity
    log.Fatal(http.ListenAndServe(":3306", router))
}

func main() {
    allTasks()
    handleRoutes()
}


我尝试过的:

  • 我验证了路由设置正确并且服务器运行没有错误。
  • 我尝试在 Flutter 应用程序中记录输出以检查是否收到数据,但没有发现有用的信息。

问题:

如何修改 Go 代码以在发出请求时打印 HTTP 状态代码?我相信了解如何正确记录这些状态代码将帮助我调试 Flutter 前端的连接问题。

go visual-studio-code http-status-codes
2个回答
1
投票

我认为他让你从 flutter 侧打印

statuscode
。然后基于此
statuscode
您就可以了解问题出在哪里。

我已经使用邮递员在本地测试了您的代码,并且正在获取数据。


0
投票

你好@rqb,这是来自 flutter 的代码

data_controller.dart:

import 'package:flutter_golang_yt/services/service.dart';
import 'package:get/get.dart';

class DataController extends GetxController{
  DataService service = DataService();
  bool _isLoading = false;
  bool get isLoading=> _isLoading;
  List<dynamic> _myData=[];
  List<dynamic> get myData=>_myData;
  Future<void> getData() async {
    _isLoading = true;
    Response response = await service.getData();
    if(response.statusCode==200){
      _myData=response.body;
      print("we got the data");
      update();
    }else{
      print(response.statusCode.toString());
    }
  }

  Future<void> postData(String task, String taskDetail) async {
    _isLoading = true;
    Response response = await service.postData({
      "task_name":task,
      "task_detail": taskDetail
    });
    if(response.statusCode==200){

      update();
      print("data post successfully");
    }else{
      print("data post failed");
    }
  }

}

和 services.dart:

import 'package:get/get.dart';

class DataService extends GetConnect implements GetxService{

  Future<Response> getData()async{
    Response response=await get(
      "http://localhost:3306/gettasks",
      headers: {
        'Content-Type':'application/json; charset=UTF-8'
      }
    );

    return response;
  }

  Future<Response> postData(dynamic body)async{
    Response response=await post(
        "http://localhost:3306/create",
        body,
        headers: {
          'Content-Type':'application/json; charset=UTF-8'
        }
    );
    return response;
  }
}

终端显示:

[GETX] Instance "DataController" has been created
[GETX] Instance "DataController" has been initialized
[GETX] Instance "GetMaterialController" has been created
[GETX] Instance "GetMaterialController" has been initialized
I/flutter (15548): null
© www.soinside.com 2019 - 2024. All rights reserved.