gpt4 book ai didi

javascript - 客户端(fetch)和服务器(nodejs http)互相不理解?

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:26 24 4
gpt4 key购买 nike

我现在试着把注意力集中在 Nodejs 上。

所以我创建了一个客户端:

let myHeaders = {
'Content-Type': 'application/json',
'Accept': 'application/json'
};

let myBody = {
aString: "Test"
};

fetch("http://localhost:8099/", {
method: 'post',
mode: 'no-cors',
headers: myHeaders,
body: JSON.stringify(myBody)
})
.then(result => {
return result.text();
})
.then(text => {
// do stuff with text from server
});

我已经创建了一个服务器:

// request needed modules
const http = require('http');

// init server
let server = http.createServer(logic);
server.listen(8099);

// server logic
function logic (req, res) {
var body = req.body;
res.end("Hello");
}

两个问题:

1) 服务器未获取主体(req.body 未定义)。

更新

请参阅下面我的回答。

--

2) 客户端没有收到“Hello”(result.text() 返回“”)。

更新2 的解决方法是:

在客户端更改此设置

fetch("http://localhost:8099/", {
method: 'post',
mode: 'no-cors', <-- CHANGE to: mode: 'cors'
...

在服务器上添加此内容

res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

--

我不明白我在这里做错了什么......

最佳答案

您的 Node.js 代码没有任何内容可以生成包含调用 fetch 的 JS 的 HTML 文档。

这意味着您必须发出跨域请求(您传递给 fetch 的绝对 URL 支持这一点)。

您还设置了 mode: 'no-cors' ,这意味着“不要在尝试访问跨源资源时引发安全异常,并且不要使响应可用于 JS”。

因此,当您尝试阅读响应时:您不能。

<小时/>

将模式设置为“cors”并将Node.js代码更改为follow the CORS specification向尝试读取数据的页面授予权限。

<小时/>

I try to wrap my mind around nodejs at the moment.

这里 Node.js 没有什么特别的。这些问题与浏览器中运行的 JavaScript 的安全限制有关,除非获得 HTTP 服务器的许可。

关于javascript - 客户端(fetch)和服务器(nodejs http)互相不理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47333798/

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