Javascript 带承诺的自定义获取失败

Javascript 带承诺的自定义获取失败,javascript,promise,fetch,Javascript,Promise,Fetch,我想用builder模式实现fetch方法,后端很好。我用邮递员测试过,效果很好。我不知道可能是什么,我尝试了所有的方法,但没有得到任何数据 我认为问题在于它没有正确地将我的数据转换为JSON或其他格式 任何帮助都将不胜感激 类获取{ 构造函数(){ this.url=null; this.result=null; this.method=null; this.header=null; this.body=null; } 调用(){ 返回新承诺((解决、拒绝)=>{ 获取(this.url,

我想用builder模式实现
fetch
方法,后端很好。我用邮递员测试过,效果很好。我不知道可能是什么,我尝试了所有的方法,但没有得到任何数据

我认为问题在于它没有正确地将我的数据转换为JSON或其他格式

任何帮助都将不胜感激

类获取{
构造函数(){
this.url=null;
this.result=null;
this.method=null;
this.header=null;
this.body=null;
}
调用(){
返回新承诺((解决、拒绝)=>{
获取(this.url,
{method:this.method,header:this.header,body:this.body})
.then(response=>response.json())
。然后(数据=>{
这个结果=数据;
控制台日志(数据);
解析(数据);
})
})
}
}
类生成器{
构造函数(){
this.customFetch=newfetch();
}
请求(url){
this.flag=true;
this.customFetch.url=url;
归还这个;
}
方法(方法){
this.customFetch.method=方法;
归还这个;
}
标题(标题){
this.customFetch.header=头;
归还这个;
}
身体(身体){
如果(!this.flag){
this.customFetch.body=JSON.stringify(body);
}
归还这个;
}
查询(obj){
}
发送(){
this.customFetch.call();
}
}
const fetchObj=新的FetchBuilder();
fetchObj.request('https://node-app-test-picsart.herokuapp.com/signin')
.method('POST'))
.标题({
“内容类型”:“应用程序/json;字符集=utf-8”
})
.身体({
电邮:'bro@gmail.com',
密码:“兄弟”
})

.send()
您的问题在于
this.flag=true
if(!this.flag){
行是什么导致
body()
方法中传递的
body
参数丢失的。因此,您的代码正在做您想要做的事情,但方式不正确,因为您希望将包发送到端点

因此,要么更改布尔值:

...
request(url) {
  this.flag = false;
  this.customFetch.url = url;
  return this;
}
...
或者检查布尔值的条件。其余代码按预期工作

...
body(body) {
  if (this.flag) {
    this.customFetch.body = JSON.stringify(body);   
  }
  return this;
}
...
运行下面的代码,打开开发者工具中的网络选项卡,查看是否使用要发送的正文发出了请求。
类获取{
构造函数(){
this.url=null;
this.result=null;
this.method=null;
this.header=null;
this.body=null;
}
调用(){
返回fetch(this.url{
方法:这个方法,
header:this.header,
身体:这个
})
.then(response=>response.json())
。然后(数据=>{
这个结果=数据;
控制台日志(数据);
返回数据;
})
}
}
类生成器{
构造函数(){
this.customFetch=newfetch();
}
请求(url){
this.flag=true;
this.customFetch.url=url;
归还这个;
}
方法(方法){
this.customFetch.method=方法;
归还这个;
}
标题(标题){
this.customFetch.header=头;
归还这个;
}
身体(身体){
如果(此标志){
this.customFetch.body=JSON.stringify(body);
}
归还这个;
}
查询(obj){}
发送(){
this.customFetch.call();
}
}
const fetchObj=新的FetchBuilder();
fetchObj.request('https://node-app-test-picsart.herokuapp.com/signin')
.method('POST'))
.标题({
“内容类型”:“应用程序/json;字符集=utf-8”
})
.身体({
电邮:'bro@gmail.com',
密码:“兄弟”
})

.send()
后端是否设置了CORS头?@GuyIncognito我不这么认为,我只尝试了内容类型头,在PostMan中效果很好。请发布文本,而不是文本图像。@DaveNewton文本在code@DaveNewton相同的主体和标题,请查看代码的底部