Как исправить 'установку значения true / false / value вместо null в mongodb с использованием mongoose, nodejs и Reactionjs' - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь обновить базу данных MongoDB, используя nodejs express и React.Но вместо обновления значение устанавливается равным нулю.

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

В выражениях

//@route UPDATE api/todos/:id
app.post("/api/todos/:id", (req, res) => {
  const { id } = req.params;
  Todo.findOne({ _id: id })
    .update({
      completed: req.body.completed
    })
    .then(res.json({ updated: true }))
    .catch(err => {
      if (err) throw err;
    });
});

В Reactjs

//completed: true/false <- updated
axios.post(`api/todos/${id}`, {
  _id: id,
  update: { title: updated }
});

Я пробовал .patch вместо .post, но не решил проблему.

Ожидаемый результат должен быть true / false, но он имеет значение null.

Примечание: Это происходит не только для значения true / false, но и для другого значения.

1 Ответ

1 голос
/ 10 июля 2019

В этом коде есть несколько ошибок:

Неправильный захват данных:

Вы отправляете {_id:id, update: {title: updated}
Что означает в req.bodyтам будет две клавиши _id и updated. На вашем маршруте это должно быть (ссылка Doc):

app.post("/api/todos/:id", (req, res) => {
  const { _id, updated } = req.params;
  Todo.update({ _id }, updated )
    .then(()=>res.json({ updated: true }))
    .catch(err => {
      if (err) throw err;
    });
});

Неправильный обратный вызов:

.then(res.json({ updated: true }))

Это неправильно, потому что then ожидает указатель на функцию.function(){}

В вашем случае вызывается res.json({ updated: true })(), потому что он думает, что res.json({ updated: true }) - это функция.

Измените его на:

.then(()=>res.json({ updated: true }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...