Если Сервер отвечает в текстовом виде / html, Клиент не распознает его? - PullRequest
0 голосов
/ 20 апреля 2020

Я попытался стереть токен jwt с помощью функции localStorage.removeItem (), но не смог в результате выполнения приведенного ниже кода.

Я пишу с использованием Javascript и Express. js в коде Visual Studio. И используйте браузер 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 (результат) до res. json (результат) На сервере мне удалось стереть токен.

Я думаю, что Клиент не получит ответ, если Сервер отправит результат по тексту / html.

Но я не уверен, что это правильно.

1 Ответ

2 голосов
/ 20 апреля 2020

Вы отправляете что-то, что не JSON клиенту. С этой строкой:

return result.json();

Вы говорите браузеру проанализировать его как JSON. Что это не так. Однако с этой строкой будет выдано исключение:

.catch((err) => err);

вы поглощаете все ошибки. Он вызывается по причине: вы вводите неверный ввод функции .json.

Удалите анализатор .json. Вы можете заменить его на .text().

Справочная информация:

Причина, по которой при использовании res.json() 'исправляется' проблема, заключается в том, что JSON.stringify включен some "string" value приведет к "some \"string\" value", который действителен JSON. JSON объект может быть просто строкой, он не должен быть объектом или массивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...