Gri*_*or3 5 javascript json node.js express
我知道这是一个常见问题,但在获取数据时我不断收到此错误:
SyntaxError: Unexpected token u in JSON at position 1 at JSON.parse ()
这发生在我测试我的完整代码时,所以我进行了测试
res.send(JSON.stringify({"data": "test"}));
Run Code Online (Sandbox Code Playgroud)
在我的客户端,我使用以下代码:
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
Run Code Online (Sandbox Code Playgroud)
测试值时,我服务器端的所有内容都会打印正确的值。但是,当我使用 console.log 在客户端打印出 responseText 时,我得到了这个:
f text() { [本机代码] }
为什么会调用此错误?通过查看堆栈溢出,我了解到当我尝试解析未定义的字符串时会发生此错误。我在解析之前放置了一个 if 语句来检查字符串是否未定义:
if (responseText === undefined) {
console.log("responseText is undefined");
}
Run Code Online (Sandbox Code Playgroud)
但是它没有输出,那么字符串真的未定义吗?作为旁注,节点是最新的。感谢您的帮助。如果在另一个问题中回答了这个问题,请告诉我。我还没有找到解决这个问题的办法。
编辑:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:response.text 应该是 response.text()。这给了我我的错误。
承诺链用上一个承诺的返回值来解析每个新的承诺。
您应该注意fetch()API 返回Promise一个对象解析Response。它没有text property,因此checkStatus解析为undefined(因此错误消息中的“u”)。
我建议你使用Body.json()解析JSON响应的方法,即改为checkStatus使用
if (res.ok) { // same as checking status between [200, 300)
return res.json()
}
if (res.status === 404) {
clear()
return Promise.reject(new Error("Sorry, we couldn't find that page"))
}
// text(), like json() returns a promise
return res.text().then(responseText => {
console.error(responseText)
return Promise.reject(new Error(`${res.status}: ${res.statusText}`))
})
Run Code Online (Sandbox Code Playgroud)
以及为了fetch()...
fetch(url)
.then(checkStatus)
.then(data => {
// data is already parsed into an object
})
Run Code Online (Sandbox Code Playgroud)
在服务器端,您可能希望使用res.json()而不是手动对数据进行字符串化
res.json({ data: 'test' })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |