gpt4 book ai didi

javascript - 如何使用 fetch API 将字符串发送到服务器

转载 作者:IT王子 更新时间:2023-10-29 01:38:53 25 4
gpt4 key购买 nike

我正在使用 fetch制作 POST 的 API向我用 Go 编写的服务器发出请求...

fetch('http://localhost:8080', {
method:'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
image:"hello"
})
})
.then((response) => response.json())
.then((responseJson) => {
console.log("response");
})
.catch(function(error) {
console.log(error);
})

在我的 Go 服务器上,我收到了 POST ...

type test_struct struct {
Test string
}

func GetImage(rw http.ResponseWriter, req *http.Request, _ httprouter.Params) {
var t test_struct

if req.Body == nil {
http.Error(rw, "Please send a request body", 400)
return
}
err := json.NewDecoder(req.Body).Decode(&t)
fmt.Println(req.Body)
if err != nil {
http.Error(rw, err.Error(), 400)
return
}
fmt.Println(t.Test);
}

POST提出要求。我知道这是因为fmt.Println(t.Test)正在向控制台打印一个空行。

fmt.Println(req.Body)给我<nil>在控制台中。

我收到的唯一错误消息来自获取 API。它向控制台打印以下错误...

SyntaxError: Unexpected end of input

这是来自 .catch声明。

简而言之,如何在服务器上接收字符串?

最佳答案

当您解码req.Body 时,您无法再次读取请求主体,因为它已经读取了缓冲区,因此您收到消息 SyntaxError: Unexpected end输入。如果你想使用req.Body上的值,你必须将req.Body的内容保存在一个变量中,像这样。

buf, err := ioutil.ReadAll(r.Body)
// check err for errors when you read r.Body
reader := bytes.NewReader(buf)
err = json.NewDecoder(reader).Decode(&t)
fmt.Println(string(buf))
if err != nil {
http.Error(rw, err.Error(), 400)
return
}

此外,您的 JSON 类似于 {"image":"hello"},因此您的结构应该是:

type test_struct struct {
Test string `json:"image"`
}

如果要将image值映射到Test

关于javascript - 如何使用 fetch API 将字符串发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41091950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com