Экспресс-маршрутизатор перенаправляет после отправки запроса - PullRequest
1 голос
/ 31 мая 2019

У меня есть экспресс-маршрут, который обрабатывает создание новых пользователей, и мне нужно, чтобы страница перенаправляла на /thankyou.html после отправки пользователя и токена.

Поэтому я обрабатываю перенаправление на внешнем интерфейсе, но вместо этогоправильного перенаправления браузер отображает пользовательские данные JSON.

Если я проверяю маршрут через почтальона, все работает, как и ожидалось, на серверной части.

Я попытался перенаправить на сервер экспресс после пользователяполучает, и я также пытался цепочки методов перенаправления и отправки.Я также добавил проверку в onreadystatechange для перенаправления после правильного кода состояния, но страница все еще перенаправляет данные JSON.

Вот мой маршрутизатор пользователя.

const express = require("express");
const router = new express.Router();
const User = require("../models/user");
const client = require("twilio")(process.env.accountSid, process.env.authToken);
const auth = require("../middleware/auth");
const {
  sendWelcomeEmail,
  sendCancellationEmail
} = require("../emails/account");
const multer = require("multer");
const sharp = require("sharp");

router.post("/users", async (req, res) => {
  const user = new User(req.body);
  phone = req.body.phone;
  console.log("Line(18) userRouter req.body", req.body);

  try {
    await user.save();
    sendWelcomeEmail(user.email, user.name);
    const token = await user.generateAuthToken();

    client.calls.create(
      {
        url: "https://example.com/voice/",
        to: phone,
        from: "+17861230774"
      },
      (err, call) => {
        if (!err) {
          process.stdout.write(call.sid);
        }
      }
    );
    res.status(201).send({ user, token });
  } catch (e) {
    res.status(400);
    console.log("User Router Error l:38: ", e);
  }
});

module.exports = router;

Здесьмой Javascript во внешнем интерфейсе, который обрабатывает запрос на публикацию.

// Function to create a new user
const registerButton = document.querySelector("#register");
registerButton.addEventListener("click", event => {
  event.preventDefault();
  var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

  const firstName = document.querySelector("#firstname").value;
  const lastName = document.querySelector("#lastname").value;

  const email = document.querySelector("#email").value;
  const phone = document.querySelector("#phone").value;
  const streetAddress = document.querySelector("#streetaddress").value;
  const zipcode = document.querySelector("#zipcode").value;
  const monthlyBill = document.querySelector("#monthlybill").value;
  const electricProvider = document.querySelector("#electricprovider").value;
  const homeowner = document.querySelector("#homeowner").value;
  console.log(
    firstName,
    lastName,
    email,
    phone,
    streetAddress,
    zipcode,
    monthlyBill,
    electricProvider,
    homeowner
  );
  if (!firstName || !lastName || !email || !phone) {
    alert("Please fill out all fields.");
  } else if (!filter.test(email)) {
    alert("Please provide a valid email address.");
  } else if (phone.length !== 10) {
    alert("Please enter a valid 10 digit phone number");
  } else if (!filter.test(email)) {
    alert("Please provide a valid email address.");
  } else {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "/users", true);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(
      JSON.stringify({
        firstName: firstName,
        lastName: lastName,
        email: email,
        phone: phone,
        zipcode: zipcode,
        electricProvider: electricProvider,
        monthlyBill: monthlyBill,
        streetAddress: streetAddress,
        homeowner: homeowner
      })
    );
    xhr.onreadystatechange = () => {
      if (xhr.readyState === 4 && xhr.status === 201) {
        console.log(xhr.responseText);
        window.location = "/thankyou.html";
      } 
    };
  }
});

Я ожидал, что браузер перенаправит на /thankyou.html после создания пользователя, но вместо этого страница перенаправляется на /users и рендерингпользовательские данные.Любые советы будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

В итоге мне пришлось заменить window.location, как предложил Абдеррахим, а также убрать валидацию следующим образом.

 xhr.onreadystatechange = () => {
      window.location.replace("http://localhost/thankyou.html");
      // if (xhr.status === 201) {
      //   console.log(xhr.responseText);
      //   window.location("/thankyou.html");
      // } 
    };
0 голосов
/ 31 мая 2019

Попробуйте заменить местоположение

window.location.replace("http://localhost/thankyou.html");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...