MongoDB Put/Update :: TypeError: {(промежуточное значение)} не является функцией

avatar
Chanelle Bösiger
1 июля 2021 в 21:11
98
1
0

В настоящее время я прохожу курс Full Stack Web Developer Bootcamp, и мне было поручено создать мое первое приложение MERN Stack с использованием операций CRUD.

При обновлении отдельного элемента я получаю следующую ошибку:

TypeError: {(intermediate value)} is not a function

enter image description here

Мой код выглядит следующим образом:

  • Сервер: carsController.js:
exports.updateOneController = (req, res) => {
  Car.findByIdAndUpdate(
    req.params.id,
    { new: true }({
      $set: {
        Model: req.body.Model,
        Make: req.body.Make,
        Owner: req.body.Owner,
        Registration: req.body.registration,
        Address: req.body.Address,
        previousOwners: req.body.previousOwners,
      },
    })
  );

  Car.save()
    .then((cars) => res.json(cars))
    .catch((err) => res.status(400).json("Error updating the car." + err));
};
  • Сервер: carsRouter.js:
router.put("/updateOne/:id", cars.updateOneController);
  • Клиент: carEdit.js:
const updateOne = (e) => {
    e.preventDefault();

    axios
      .put(`cars/updateOne/${id}`, {
        method: "PUT",
        headers: {
          Accept: "application/json",
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          Model: Model,
          Make: Make,
          Owner: Owner,
          Registration: Registration,
          Address: Address,
          previousOwners: previousOwners,
        }),
      })
      .then((response) => {
        Swal.fire({
          imageUrl: "./images/success.gif",
          imageWidth: 150,
          imageHeight: 150,
          imageAlt: "Error",
          confirmButtonColor: "#007aff",
          width: 400,
          title: "SUCCESS!",
        });
        setCars(response.data);
      })
      .catch((error) => {
        console.log(error);
        Swal.fire({
          imageUrl: "./images/exclamation.gif",
          imageWidth: 150,
          imageHeight: 150,
          imageAlt: "Error",
          confirmButtonColor: "#ff0000",
          width: 400,
          title: "ERROR!",
          text: "User data missing",
        }).then(function () {
          window.location.reload();
        });
      });
  };
            <Button
              type="button"
              title="Update a Car"
              onClick={(e) => updateOne(e)}
            >
              <FontAwesomeIcon icon={faEdit} />
              <span id="editone">x1</span> Update
            </Button>

Я не уверен, является ли это конфликтом между findByIdAndUpdate() и save()?

Ссылка на репозиторий GitHub: https://github.com/ChanBos/MERN-Cars-Database-Application

Источник

Ответы (1)

avatar
Arik
1 июля 2021 в 21:47
1

В строке 4 в коде сервера отсутствует запятая, из-за чего следующие скобки интерпретируются как операция вызова.

Ваш код должен быть:

exports.updateOneController = (req, res) => {
  Car.findByIdAndUpdate(
    req.params.id,
    { new: true }, ({  // This is the changed line
      $set: {
        Model: req.body.Model,
        Make: req.body.Make,
        Owner: req.body.Owner,
        Registration: req.body.registration,
        Address: req.body.Address,
        previousOwners: req.body.previousOwners,
      },
    })
  );

  Car.save()
    .then((cars) => res.json(cars))
    .catch((err) => res.status(400).json("Error updating the car." + err));
};

Я предполагаю, что вы не используете один из распространенных редакторов/IDE, так как они могут показать вам точную инструкцию, вызвавшую эту ошибку, что значительно упростит ее исправление. Программисты могут быть очень религиозны в отношении своих редакторов, но для Node.js есть несколько хороших вариантов. Я лично использую VS Code, но есть много хороших вариантов. Я настоятельно рекомендую найти хороший редактор, а если вы уже им пользуетесь, обязательно используйте его средства отладки для отслеживания подобных ошибок.

Chanelle Bösiger
2 июля 2021 в 07:31
0

Большое вам спасибо за вашу помощь. Это помогло устранить ошибку. Я тоже использую VS Code. Я буду первым, кто признает, что мне нужно работать над своими навыками отладки. Мое приложение не показывало никаких проблем в VS Code и я наивно предполагал, что с синтаксисом все в порядке. Я постараюсь улучшить эти навыки, а не полагаться исключительно на Beautify, Prettier или им подобные. Хорошего дня впереди.