如果服务器以text/html类型响应,客户端是否无法识别



我试图使用localStorage.removeItem((函数擦除jwt令牌,但由于运行以下代码而失败。

我在Visual Studio代码中使用Javascript和Express.js进行编码。并使用Chrome浏览器。

【客户】

secession = () => {
fetch('http://localhost:3000/users/secession', {
headers: {
'Content-Type': 'application/json',
'accessToken': JSON.stringify(localStorage.getItem('tokenValue')),
}
})
.then((result) => {
return result.json();
})
.then((data) => {
if (data === 'success secession') {
localStorage.removeItem('tokenValue');
alert('Success');
} else {
alert('Fail. Try again');
}
})
.catch((err) => err);
}

[服务器]

secession: async (req, res) => {
try {
const token = req.get('accessToken');
if (typeof token !== 'undefined') {
const decoded = jwt.verify(JSON.parse(token), secretKey);
const result = await users.users.secession(decoded);
// result is 'success secession' 
res.send(result);
} else {
res.sendStatus(403);
}
} catch (err) {
res.send(err);
}
}

当我在服务器上将res.send(result(更改为res.json(result。

我认为如果服务器通过text/html发送结果,客户端不会收到响应。

但我不确定这是对的。

您正在向客户端发送非JSON的内容。使用此行:

return result.json();

您正在告诉浏览器将其解析为JSON。事实并非如此。但是,将抛出一个异常,其中包含以下行:

.catch((err) => err);

你正在吞下所有的错误。抛出它是有原因的:您正在向.json函数提供无效输入。

卸下.json解析器。您可以将其替换为.text()

背景信息:

使用res.json()"修复"该问题的原因是,在some "string" value上运行JSON.stringify将导致"some "string" value",这是有效的JSON。JSON对象可能只是一个字符串,它不必是对象或数组。

相关内容

  • 没有找到相关文章

最新更新