У меня есть экспресс-маршрут, который обрабатывает создание новых пользователей, и мне нужно, чтобы страница перенаправляла на /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
и рендерингпользовательские данные.Любые советы будут с благодарностью.