Ошибка при попытке вернуть обещание из пн goose сохранить - PullRequest
0 голосов
/ 23 марта 2020

Я использую mongoose и express в node.

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

Маршрут - / займы

router.post('/problems/add', (req, res, next) => {
// error checking
  req.headers.api = 'true';

  let required = ['loan', 'item', 'type', 'quantity', 'description'];
  let problems = [];

  required.forEach(r => {
    if (!req.body[r]){
      problems.push(`Field '${r}' was not supplied`);
    }
  });

  if (problems.length > 0){
    res.json({success: false, message: `Couldn't create problem:\n${problems.join('\n')}`});
  } else {

// Important part
    loanController.addProblem(req.body)
    .then((newProblem) => { // line 118 mentioned in error message
      res.json({success: true, problem: newProblem});
    })
    .catch(err => {
      return next(err);
    })
  }

});

Контроллер - loanController

exports.addProblem = (body) => {

  Loan.findById(mongoose.Types.ObjectId(body.loan)).exec()
  .then(foundLoan => {

    if (!foundLoan){
      throw new Error('loan not found');
    }

    let newProblem = new Problem({
      loan: foundLoan._id,
      item: mongoose.Types.ObjectId(body.item),
      type: body.type,
      quantity: body.quantity,
      status: 'new',
      text: body.description
    });

    return newProblem.save(); // newProblem is a valid mongoose document
  })
  .catch(err => {
    return Promise.reject(err);
  });

}

Я получаю сообщение об ошибке ниже, оно не попадает любым из этих блоков перехвата и исходит из моего общего сообщения об ошибке:

"Ошибка типа: невозможно прочитать свойство then" неопределенного в router.post (c: \ dev .... \ loan. js: 118: 5)

Теперь, когда я устанавливаю точку останова на newProblem.save(), она показывает, что newProblem является действительным документом Mon goose, эти документы сохраняются правильно. Я даже могу вызвать newProblem.save().then() из командной строки отладки.

Я предполагаю, что где-то допустил ошибку, но она структурирована аналогично другим объектам, и они работают нормально.

Может кто-нибудь заметить сделанную мной ошибку или предложить способ дальнейшего расследования?

...