Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果服务器以text/html类型响应,客户端是否会识别它?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如果服务器以text/html类型响应,客户端是否会识别它?

Javascript 如果服务器以text/html类型响应,客户端是否会识别它?,javascript,node.js,express,Javascript,Node.js,Express,我试图使用localStorage.removietem()函数擦除jwt令牌,但由于运行下面的代码而失败 我正在Visual Studio代码中使用Javascript和Express.js进行编码。 并使用Chrome浏览器 [客户] secession = () => { fetch('http://localhost:3000/users/secession', { headers: { 'Content-Type': 'application/json',

我试图使用localStorage.removietem()函数擦除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();
.catch((err) => err);
您告诉浏览器将其解析为JSON。但事实并非如此。但是,将使用以下行引发异常:

return result.json();
.catch((err) => err);
你在吞咽所有的错误。抛出它的原因是:您正在向
.json
函数提供无效输入

删除
.json
解析器。你可以用它来代替

背景资料:
之所以使用
res.json()
“修复”这个问题,是因为在
一些“字符串”值上运行
json.stringify
将导致
一些“字符串”值“
,这是有效的json。JSON对象可能只是一个字符串,而不必是对象或数组。

您正在向客户端发送非JSON的内容。这一行:

return result.json();
.catch((err) => err);
您告诉浏览器将其解析为JSON。但事实并非如此。但是,将使用以下行引发异常:

return result.json();
.catch((err) => err);
你在吞咽所有的错误。抛出它的原因是:您正在向
.json
函数提供无效输入

删除
.json
解析器。你可以用它来代替

背景资料:
之所以使用
res.json()
“修复”这个问题,是因为在
一些“字符串”值上运行
json.stringify
将导致
一些“字符串”值“
,这是有效的json。JSON对象可能只是一个字符串,而不必是对象或数组。

您是否尝试过向浏览器控制台添加一些输出?我的冒险:执行
stringify()
失败,如果响应格式不是json,您就看不到这种情况。您是否尝试向浏览器控制台添加一些输出?我的冒险之旅:执行
stringify()
失败,如果响应的格式不是json,您就看不到这种情况。