Javascript JSON中位置1处的意外标记u

Javascript JSON中位置1处的意外标记u,javascript,node.js,json,express,Javascript,Node.js,Json,Express,我知道这是一个常见的问题,但在获取数据时,我经常遇到以下错误: SyntaxError:JSON中JSON.parse()位置1处的意外标记u 这是在我测试完整代码时发生的,所以我使用 res.send(JSON.stringify({"data": "test"})); 在我的客户端,我使用以下代码: fetch(url) // fetch works .then(checkStatus)

我知道这是一个常见的问题,但在获取数据时,我经常遇到以下错误:

SyntaxError:JSON中JSON.parse()位置1处的意外标记u

这是在我测试完整代码时发生的,所以我使用

res.send(JSON.stringify({"data": "test"}));
在我的客户端,我使用以下代码:

fetch(url)                                   // fetch works
    .then(checkStatus)                       // checks for errors, if none send response text
    .then(function (responseText) {
        let data = JSON.parse(responseText); // where I'm getting the error
测试值时,服务器端的所有内容都会打印正确的值。但是,当我在客户端使用console.log打印responseText时,我会得到以下结果:

f text(){[本机代码]}

为什么要调用此错误?通过查看堆栈溢出,我了解到当我试图解析未定义的字符串时会发生此错误。我在解析之前放了一条if语句,以检查字符串是否未定义:

if (responseText === undefined) {
    console.log("responseText is undefined");
}
但是它没有输出,所以字符串真的没有定义吗?作为旁注,节点是最新的。谢谢你的帮助。如果这个问题在另一个问题中得到了回答,请让我知道。我还没有找到解决这个问题的办法

编辑:

功能检查状态(响应){
如果(response.status>=200&&response.status<300){
返回response.text;
}else if(response.status==404){
清除();
return Promise.reject(新错误(“对不起,我们找不到该页面”);
}否则{
log(response.text());
return Promise.reject(新错误(response.status+“:“+response.statusText));
}
}
编辑:response.text应该是response.text()。这让我犯了错误

更新以匹配新的问题代码 承诺链用最后一个承诺的返回值解析每个新承诺

您应该注意
fetch()
API返回一个对象解析。这没有
文本
,因此
检查状态
正在使用
未定义
进行解析(因此错误消息中有“u”)

我建议您使用该方法来解析JSON响应,即更改
checkStatus
以使用

if(res.ok){//与检查[200300]之间的状态相同
return res.json()
}
if(res.status==404){
清除()
return Promise.reject(新错误(“抱歉,我们找不到该页面”))
}
//text()与json()一样返回一个承诺
返回res.text().then(responseText=>{
控制台错误(responseText)
return Promise.reject(新错误(`${res.status}:${res.statusText}'))
})
对于
fetch()

fetch(url)
.然后(检查状态)
。然后(数据=>{
//数据已解析为对象
})

在服务器端,您可能希望使用而不是手动字符串化数据

res.json({data:'test'})

checkStatus到底在做什么?我想你的问题是
checkStatus
函数。它返回以
'u'开头的字符串
,请
控制台.log(responseText)
和show
checkStatus
。我将checkStatus功能添加到question@GrimThor3谢谢,这更清楚了。我在下面更新了我的答案。是的,这就是罪魁祸首。谢谢。我将实现这一点,并尝试理解Body.json()
function checkStatus(response) {
    if (response.status >= 200 && response.status < 300) {
        return response.text;
    } else if (response.status === 404) {
        clear();
        return Promise.reject(new Error("Sorry, we couldn't find that page"));
    } else {
        console.log(response.text());
        return Promise.reject(new Error(response.status + ": " + response.statusText));
    }
}