"Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0" ERROR -- NodeJS, MongoDB, React Application
"Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0" ERROR -- NodeJS, MongoDB, React Application
我正在尝试从我的 React 应用程序的用户数据库中获取一个数组。我得到的响应是一个 HTML 文件,但我不确定为什么它不起作用,因为我有相同的代码可以完美地用于非数组元素。这是代码:
客户:
async function populateFavorite() {
const req = await fetch("http://localhost:3001/api/favorite", {
headers: {
"x-access-token": localStorage.getItem("token"),
},
});
const data = await req.json();
if (data.status === "ok") {
console.log(data.watchlist)
} else {
alert(data.error);
}
}
目前,它似乎没有通过这里:
const data = await req.json();
服务器:
app.get('/api/favorite', async (req, res) => {
const token = req.headers['x-access-token']
try {
const decoded = jwt.verify(token, '<key>')
const email = decoded.email
const user = await User.findOne({ email: email })
return res.json({ status: 'ok', watchlist: user.watchlist })
} catch (error) {
console.log(error)
res.json({ status: 'error', error: 'invalid token' })
}
})
这是数据库中数据的样子:
{"_id":{"$oid":"627306d86089cb6e720e0e8a"},
"firstName":"Ailany",
"email":"testing@orbit.com",
"coins_owned":[],
"watchlist":["Bitcoin","Serum"],
"dateCreated":{"$date":{"$numberLong":"1651705560381"}},
"__v":{"$numberInt":"0"}
目标是在呈现网站时让客户端接收用户监视列表中的项目数组,然后将它们单独呈现在列表中。
如有任何帮助,我们将不胜感激!
Express 在定义路由时使用优先级。我将以下代码放在我所有的获取路线之上,因此覆盖了它们。
app.get("*", function (request, response) {
response.sendFile(path.resolve(__dirname, "../frontend/build", "index.html"));
});
解决方案:
我将这些代码行移到了底部,以便其他路线优先。现在,我在响应中得到 JSON 而不是 index.html.
我正在尝试从我的 React 应用程序的用户数据库中获取一个数组。我得到的响应是一个 HTML 文件,但我不确定为什么它不起作用,因为我有相同的代码可以完美地用于非数组元素。这是代码:
客户:
async function populateFavorite() {
const req = await fetch("http://localhost:3001/api/favorite", {
headers: {
"x-access-token": localStorage.getItem("token"),
},
});
const data = await req.json();
if (data.status === "ok") {
console.log(data.watchlist)
} else {
alert(data.error);
}
}
目前,它似乎没有通过这里:
const data = await req.json();
服务器:
app.get('/api/favorite', async (req, res) => {
const token = req.headers['x-access-token']
try {
const decoded = jwt.verify(token, '<key>')
const email = decoded.email
const user = await User.findOne({ email: email })
return res.json({ status: 'ok', watchlist: user.watchlist })
} catch (error) {
console.log(error)
res.json({ status: 'error', error: 'invalid token' })
}
})
这是数据库中数据的样子:
{"_id":{"$oid":"627306d86089cb6e720e0e8a"},
"firstName":"Ailany",
"email":"testing@orbit.com",
"coins_owned":[],
"watchlist":["Bitcoin","Serum"],
"dateCreated":{"$date":{"$numberLong":"1651705560381"}},
"__v":{"$numberInt":"0"}
目标是在呈现网站时让客户端接收用户监视列表中的项目数组,然后将它们单独呈现在列表中。
如有任何帮助,我们将不胜感激!
Express 在定义路由时使用优先级。我将以下代码放在我所有的获取路线之上,因此覆盖了它们。
app.get("*", function (request, response) {
response.sendFile(path.resolve(__dirname, "../frontend/build", "index.html"));
});
解决方案:
我将这些代码行移到了底部,以便其他路线优先。现在,我在响应中得到 JSON 而不是 index.html.