Mon goose .save Метод работает, но Promise возвращает ошибку - PullRequest
0 голосов
/ 26 мая 2020

У меня есть коллекция в MongoDB, и я могу использовать Express для получения данных. Но когда вы делаете запрос на обновление от клиента, он работает, но mongooseInstance.save (). Then ((err, settings) ... обещание возвращает полезную нагрузку в качестве переменной ошибки.

Вот код :

const SettingsSchema = mongoose.Schema({
  _id: mongoose.Schema.Types.ObjectId,
  main_email: String,
  bio: String,
  gitHub_url: String,
  linkedin_url: String,
  bio_intro: String,
  bio_tagline: String,
  bio_pic: String
}),

SettingsModel = mongoose.model('profile_settings', SettingsSchema, 'profile_settings');

app.get('/profileSettings', (req, res) => {
  SettingsModel.find((err, settings) => {
    if (err) {
      res.status(500).send(err);
    } else {
      res.json(settings);
    }
  });
});

app.put('/profileSettings', (req, res) => {
  SettingsModel.findById("5ec40c318f3ebfe68a400e6f", (err, settings) => {
    if (err) {
      res.status(500).send(err);
    }
    if (settings) {
      settings.main_email = req.body.main_email;
      settings.bio_intro = req.body.bio_intro;
      settings.bio_tagline = req.body.bio_tagline;
      settings.bio_pic = req.body.bio_pic;
      settings.bio = req.body.bio;
      settings.linkedin_url = req.body.linkedin_url;
      settings.gitHub_url = req.body.gitHub_url;

      settings.save().then((err, settings) => {
        console.log('err: ', err);
        console.log('settings: ', settings);
        if (err) {
          res.status(500).send(err);
          //res.json(err);
        } else {
          res.json(settings);
        }
      }); 
    } else {
      res.status(404).send('Settings Failed to Update');
    }
  });
});

Итак, get работает так, как ожидалось, а put фактически обновляет все значения в mon go db. Но внутри метода save ошибка и настройки одинаковы. Когда этот код запускается он отправляет клиенту ошибку 500, хотя все работает на бэкэнде.

      console.log('err: ', err);
      console.log('settings: ', settings);
      if (err) {
        res.status(500).send(err);
        //res.json(err);
      } else {
        res.json(settings);
      }
    });

если я помещаю res.json(err) в if(err){}, он возвращает то же, что и res.json(settings), и я получаю 200 status, но это не позволяет мне правильно обрабатывать ошибки.

Заранее спасибо. Вот версии, которые я использую

node: 10.15.1

express: 4.16.1

пн goose: 5.9.14

mongoDB Atlas Service

1 Ответ

0 голосов
/ 26 мая 2020

Ошибка в синтаксисе .then. Вам необходимо обновить его, как показано ниже

settings.save().then(settings => {
 console.log('settings: ', settings);
 res.json(settings);
}, err => {
 console.log('err: ', err);
 res.status(500).send(err);
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...