Обновите данные в MongoDB, используя Mon goose и Node.js - PullRequest
2 голосов
/ 13 марта 2020

Я пытаюсь обновить определенную информацию в коллекции пользователей, когда пользователь посещает страницу.

Но мой метод не работает. Может кто-нибудь помочь исправить это.

app.get('/add-your-accommodation/apartment-type', (req, res, next) => {

  if (req.isAuthenticated()) {
    res.render('apartment-type.ejs')
  } else {
    res.render('login.ejs')
  }

  var id = req.params.id

  if(mongoose.Types.ObjectId.isValid(id)) {
     User.findByIdAndUpdate(id, {$set: {accomtype: 'house'}},{new: true})   
  }
});

Ответы [ 3 ]

0 голосов
/ 13 марта 2020

Ваш req.params.id не определен, так как его нет в пути маршрута. Вы можете сделать это,

app.get('/add-your-accommodation/apartment-type', (req, res) => {

  if (!req.isAuthenticated()) {
    return res.render('login.ejs')
  }

  res.render('apartment-type.ejs')

  var id = req.user._id //since you're using passport (LocalStrategy)

  if(mongoose.Types.ObjectId.isValid(id)) {
     User.findByIdAndUpdate(id, {$set: {accomtype: 'house'}})
  }
})

Теперь, когда вы вызываете свой API, сделайте это так,

GET /add-your-accommodation/apartment-type
0 голосов
/ 13 марта 2020

Я согласен с @ kedar-sedai, когда вы обновляете / изменяете что-то в своей БД, вы не должны использовать запрос GET. Хорошей практикой будет использование метода PUT, даже если вам нечего передать в теле. Вам и другим разработчикам будет проще понять, что делает ваш код с первого взгляда.

Вот 4 HTTP-запроса, которые будут работать в большинстве случаев:

GET

Вы хотите получить информацию из вашей БД (например: получить пользователей, получить все типы квартир ...)

POST

Вы хотите добавить информацию (например: зарегистрировать пользователя, добавить квартиру, ...) или отправить информацию, используя тело запроса POST (например, логин, ...)

PUT

Вы хотите обновить значение (например: изменить имя пользователя, изменить тип квартиры, ...)

УДАЛИТЬ

Вы просто хотите удалить что-то в своей БД (например: удалить пользователя ...)

0 голосов
/ 13 марта 2020

Попробуйте findOneAndUpdate. Также используйте функцию обратного вызова в функции запроса для получения ошибки или результата.


app.get('/add-your-accommodation/apartment-type/:id', (req, res, next) => {
    if (req.isAuthenticated()) {
        res.render('apartment-type.ejs')
    } else {
        res.render('login.ejs')
    }
    var id = req.params.id

    if(mongoose.Types.ObjectId.isValid(id)) {
        User.findOneAndUpdate({_id: mongoose.Types.ObjectId(id)}, { $set: { accomtype:'house' } },(err, result)=>{
            if (err) throw new Error(err);
            console.log(result)
            return
        })   
    }   
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...