Почему я получаю эту 431 (слишком большая ошибка заголовка запроса) ТОЛЬКО ЛОКАЛЬНО? - PullRequest
0 голосов
/ 13 марта 2020

У меня развернуто приложение, и у меня возникла проблема с моей контактной формой. Это приложение 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...