NodeJS - отправить 200 кодов состояния 2 раза, если условие выполнено - PullRequest
0 голосов
/ 14 марта 2019

Я отправляю данные 2 раза клиенту, но посылаю вторые данные клиенту, только если выполняется какое-то условие, например: если существует некоторая переменная (из промежуточного программного обеспечения, в моем случае: req.userId, который не всегда ожидается с момента req.userIdдекодируется идентификатор из токена jwt, поэтому, если токен существует, req.userId также существует.

Я проверяю пользователя таким образом, если пользователь прошел проверку подлинности, если у него есть токен, и я отправляю дополнительные данные, в противном случае я должен отправитьданные, которые видны всем), отправьте заголовок клиенту с кодом состояния 200 (я имею в виду, что заголовок не для ошибки) и продолжите выполнение кода, кроме этого, если в операторе есть второй заголовок для отправки также с кодом состояния 200, но если условиеложно, пропустить это условие и просто отправить второй заголовок, который отправляется в каждом случае, и клиентская сторона (реагирует на js) проверяет, существуют ли эти данные, и затем устанавливает их в состояние или делает все, чтобы предотвратить неопределенные переменные, проверка на стороне клиента легка, я ужесделал это, но из-за моего глючного кода я получил неопределенный.

В любом случае, я знал это, и было запланировано, что я получу неопределенное значение без проверки, поэтому проблема не в стороне клиента, а в стороне сервера, и вот проблема: мой код отправляет только заголовок, который находится первым в коде, вот мой код

router.get("/", async (req, res) => {
  var data = { foo: "bar", foo1: "bar1" };

  if (req.userId) {
    const user = await User.findById({ _id: req.userId }, "-password").lean();

    res.status(200).send({ name: user.username });
  }

  return res.status(200).send({ data: JSON.stringify(data) });
});

Таким образом, если я сначала пишу return res.status(200).send({data: JSON.stringify(data)}), он не отправляет объект данных отправки (ни имя), но когда я аутентифицируюсь и создаю req.userId, он отправляет объект данных (не имя), но если я сначалав состоянии записи он сначала ничего не отправляет, но когда я аутентифицируюсь и создаю req.userId, он посылает имя (не объект данных), я действительно сбит с толку и не знаю, почему это происходит

Вот моя реакциякод, если это имеет значение:

componentDidMount() {
  axios
    .get("/api/main")
    .then(res => res.data)
    .then(data => {
      this.setState({ name: data.name });

      alert(data.data);
    })
    .catch(error => {
      if (error.response) {
        console.log(error.response.data.message);
      }
    });
}

Поскольку я использую componentDidMount, он должен отправлять объект данных при загрузке содержимого страницы

СПАСИБО!

1 Ответ

3 голосов
/ 14 марта 2019

Вы не можете ответить дважды за один запрос.Но вы можете управлять тем, как вы отвечаете по-другому, например:

router.get("/", async (req, res) => {
  var data = { foo: "bar", foo1: "bar1" };

  if (req.userId) {
    const user = await User.findById({ _id: req.userId }, "-password").lean();

    data.name = user.username;
  }

  return res.status(200).send({ data: JSON.stringify(data) });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...