Можете ли вы отправить код состояния и веб-страницу html? - PullRequest
0 голосов
/ 07 апреля 2020

Я использую фреймворк express в узле, и я не знаю, что лучше, или это неправильно, но я хотел отправить код состояния, например, res.status(200).send("Success");, если ввод формы совпадает с сервер, и если он не совпадает, то отправьте что-то вроде res.status(403).send("Forbidden"); Затем на веб-странице я могу обновить элемент абзаца с отправленным ответом. Таким образом, пользователь знает, был ли он успешным или нет.

Возможно ли это? Если это как я это делаю? И есть ли лучший способ?

1 Ответ

0 голосов
/ 07 апреля 2020

Конечно, это возможно!
Взято из express API-интерфейса:

res.status (код)
Устанавливает статус HTTP для ответа. Это цепочечный псевдоним Node's response.statusCode.

    res.status(403).end()
    res.status(400).send('Bad Request')
    res.status(404).sendFile('/absolute/path/to/404.png')

Обычно отправка кодов состояния - это путь к go. Если вы отправляете данные без кода состояния, express автоматически добавит код состояния 200, поэтому вам не нужно добавлять его вручную.

На стороне клиента вы должны проверить не Код статуса 2xx в вашем объекте ответа на ваш запрос. Вот пример использования api fetch.

    fetch('/your/api')
      .then((response) => {
        if (!response.ok) { // Check for a non 2xx status code
          throw new Error('Network response was not ok');
        }
        // Do something with the response data
      })
      .catch((error) => {
        // This is only reached when a network error is encountered or CORS is misconfigured on the server-side
        console.error('There has been a problem with your fetch operation:', error);
      });


Пример: учетные данные Use Case
Если вы хотите написать веб-страницу с формой для ввода пользователя учетные данные, чтобы получить доступ к дальнейшему контенту, я бы предложил сделать это следующим образом:
  • на стороне клиента:
    // Function is listening to the submit event of your login form
    function submitLoginForm() {
      let username = document.getElementById("username").value;
      let password = document.getElementById("password").value;
      const options = {
        method: 'POST',
        body: JSON.stringify({ username, password }),
        headers: {
          'Content-Type': 'application/json'
        }
      };
      return fetch('/api/login', options)
        .then((response) => {
          // Check for a non 2xx status code
          if (!response.ok) {
            // Show a failed login hint
            showMessageBox('Login was not granted by the server. Please check you user name or password and try again.', 'error');
          }
          // Your login was successfull, manually redirect to user's dashboard, or whatever content...
        })
        .catch((error) => {
          // This is only reached when a network error is encountered or CORS is misconfigured on the server-side
          console.error('There has been a problem with your fetch operation:', error);
        });

    }
  • на стороне сервера:
    app.post('/api/login', (req, res, next) => {
      let username = req.body.username;
      let password = req.body.password;
      checkCredentials(username, password, (err) => {
        if (err) {
          return res.status(400).send('Wrong user name or password.');
        }
        // Consider adding a token or a cookie to the response object, so that the user keeps logged in.
        return res.send('Access granted.');
      });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...