У меня развернуто приложение, и у меня возникла проблема с моей контактной формой. Это приложение React. js с узлом, express и серверной частью mongoDB. Он развернут на Heroku.
На развернутой версии все отлично работает. Когда пользователь вводит свои данные в контактную форму, он запускает API.saveLead()
, который запускает axios.post()
по маршруту contact/lead
. Данные сохраняются в базе данных. Затем вызывается API.sendMail()
, который запускает маршрут axios.post()
до contact/lead
. Данные упакованы и соответствующим образом отправлены на требуемый адрес электронной почты с помощью пакета nodemailer.
Хотя в развернутой версии все работает правильно, когда я нажимаю "Отправить" в контактной форме НА ЛОКАЛЬНОЙ ВЕРСИИ, я получаю 431 Ошибка заголовков запроса слишком большая. Он не очищает форму, ничего не сохраняется в локальной базе данных (я не думаю), и модуль nodemailer никогда даже не запускается.
Вот ошибка:
xhr.js:155 POST http://localhost:3000/contact/lead 431 (Request Header Fields Too Large)
Ниже приведен код, связанный с отправкой формы, ее маршрутами и взаимодействием с моделью mon goose. js и контроллером в бэкэнде.
handleFormSubmit () вызывает метод saveLead в модуле API, который возвращает маршруты ax ios. Маршрут ax ios попадает в бэкэнд, где маршрутизатор express обрабатывает маршруты, которые затем используют mon goose. js для моделей и контроллера (leadController. js).
React Component handleFormSubmit API Call:
handleFormSubmit = event => {
event.preventDefault();
let options = {
Name: this.state.fullName,
Email: this.state.email,
Phone: this.state.phone,
Message: this.state.message
}
if (this.state.fullName && this.state.email) {
this.saveLead(options)
}
};
//saveLead function
saveLead = options => {
API.saveLead(options)
.then(res => {
this.sendMail(options)
console.log("RES: ", res)
})
.then(res => {
this.setState({ fullName: "", phone: "", email: "", message: "",
prevState: res})
})
.catch(err => {
console.log("[1]err happening here", err)
});
}
API Ax ios Call To Backend:
// Saves a contact info and messaege to the database
saveLead: function(leadData) {
return axios.post("/contact/lead", leadData);
},
sendMail: function(mailData) {
return axios.post("/contact/mail", mailData);
},
API-маршруты (бэкэнд):
// API Routes
router.use("/contact", contactRoutes);
Lead route (/ contact /):
//Lead route
router.use("/lead", leadRoutes);
Ведущий маршрут (/ contact / lead):
// Matches with "/contact/lead"
router.route("/")
.get(leadController.findAll)
.post(leadController.create);
leadController. js:
create: function(req, res) {
db.Lead
.create(req.body)
.then(response => res.send(response))
.catch(err => res.status(422).json(err));
},
findAll: function(req, res) {
db.Lead
.find({})
.sort({ date: -1 })
.then(dbModel => res.json(dbModel))
.catch(err => res.status(422).json(err));
}
Ведущая модель (дБ. Свинец используется выше). Это модель mon goose:
const leadSchema = new Schema({
Name: { type: String, required: true },
Email: { type: String, required: true },
Phone: String,
Message: String,
Date: { type: Date, default: Date.now }
});
const Lead = mongoose.model("Lead", leadSchema);
Ссылку на мой gitHub можно найти здесь: https://github.com/TheGreekCuban/agavepv
Ссылку на развернутый сайт можно найти здесь : https://www.agavepv.com