我正在尝试对节点中的json-server提供服务的json文件执行POST操作。尝试执行所述POST操作时,我收到以下500错误:
" TypeError:无法读取属性' id'未定义的 在Function.createId"
后期操作如下:
pushState = () => {
var update = {
"a": 1,
"b": 2
};
return fetch(url, {
mode: 'cors',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(update)
})
.then((response) => {
console.log(response);
response.text();
})
.then((responseData) => {
console.log("Response:",responseData);
}).catch((error) => {
console.log(error);
})
.done();
}
我是否正确执行了POST请求?
修改:添加异步后等待我仍然遇到同样的错误:
pushState = async () => {
var update = {
"a": 1,
"b": 2
};
var result = await fetch(url, {
mode: 'cors',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(update)
})
.then((response) => {
console.log(response);
return response;
})
.catch((error) => {
console.log(error);
});
return result;
}
答案 0 :(得分:2)
这里有两个问题:
fetch
返回任何内容。fetch
是异步的。现在通过pushState
立即回复结果来调用它的方式,当您收到错误时,它几乎总会返回undefined
。您需要使用async / await编写pushState
。编辑以回答评论:
由于您使用的是函数箭头语法,因此pushState
异步将如下所示:
pushState = async () => { /* code */ }
为了帮助您了解fetch
的工作原理,建议您阅读this first。然后要了解高级别的异步/等待,请阅读this article。生成的代码如下所示:
pushState = async () => {
var update = {
"a": 1,
"b": 2
};
var result = await fetch(...) // Remember to return something.
return result;
}