Req.body возвращает {NaN: ""} в server console.info при передаче объекта по маршруту POST API

Я получаю сообщение об ошибке, когда публикую в своем маршруте API для создания документа в моей коллекции. данные - это информация о пользователе, размещаемая также в базе данных

Вот форма отправки:

handleFormSubmit = (event) => {
    event.preventDefault();
    const userId = localStorage.getItem("userId")
    const newForm = {
      id: userId,
      title: this.state.title,
      main: this.state.main,
      summary: this.state.summary
    };
    console.info(newForm);
    API.addForm(newForm)
    .then(response => {
      console.info(response)
    })
  }
  
  // =============== API =========== //
  
  addForm: function(form) {
        return axios.post("/api/form", + form);
    },

В журнале console.info на стороне клиента выводится правильный объект со всеми соответствующими значениями в объекте, но когда он попадает на внутренний сервер, тело POST возвращает {NaN: ""} выдает ошибку UnhandledPromiseRejectionWarning: ошибка проверки И ответ не выполняется

вот маршрут API серверной части:

// ======== Index.js for API ======= // 

router.use("/api",require("./apiRoutes.js")(passport));

// ============== apiRoutes.js ============= //

router.route("/form")
    .post(formController.addRecipe);
  
 // ============= Controller ============ //
 
 addForm: function(req, res) {
        console.info("addForm Function")
        console.info("===================== = ")
        console.info(req.body)
        db.Form.create(req.body)
        .then(form => {
            console.info(form)
            return db.User.findOneAndUpdate({ _id: req.body.id }, { form: form._id }, { new:true });
        })
        .then(userInfo => {
            res.json(userInfo);
        })
    }

Что должен делать +form?

Jonas Wilms 12.10.2018 23:08

это параметр формы, когда я отправляю объект newForm в маршрут addForm

Jacob Cadiente 12.10.2018 23:10

А почему именно +? какая-то конкретная причина?

Jonas Wilms 12.10.2018 23:11

не конкретно Это был пример, который я взял из старого репозитория классов, я могу попытаться удалить его и посмотреть, работает ли это

Jacob Cadiente 12.10.2018 23:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
4
325
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашей функции addForm второй параметр axios.post - это объект, и вам не нужен +, поэтому удалите +

addForm: function(form) {
    return axios.post("/api/form", form);
 }

Оператор + переводит объект form в число. Поскольку объект не может быть преобразован в число разумным образом, он вернет NaN (а не число). Следующее должно решить эту проблему:

addForm: function(form) {
    return axios.post("/api/form", form);
 }

Вот пример происхождения NaN:

let obj = {prop1: 1};

let nonSensicalNumber = +obj;

console.info(nonSensicalNumber);

да, спасибо, что имеет смысл, только начал изучать разработку 6 месяцев назад, пытаясь избавиться от привычки к этим крошечным ошибкам

Jacob Cadiente 12.10.2018 23:20

Рад слышать!! поймите, что если вы поставите плюс перед любым выражением, JS преобразует его в число. Не забывайте, что javascript имеет разные типы данных (string, int, boolean) только потому, что вам не нужно объявлять их, что они все еще присутствуют и могут вызвать ошибки, если вы не знаете, как они себя ведут.

Willem van der Veen 12.10.2018 23:22

Другие вопросы по теме