Коа-роутер игнорирует async/await от Mongoose и всегда возвращает 404

Это код маршрута. Когда я использую комментарий Promise, он возвращает 123 в теле. Но с запросом мангуста он возвращает статус 404. Элемент в журнале найден хорошо. Но похоже роутер просто игнорирует await и сразу возвращает 404. Что я делаю неправильно?

router.get('/:id', async (ctx, next) => {
    // var item = await Promise.resolve(123); // this line works good!
    var item = await Model.findById(ctx.params.id); // but this not
    ctx.body = item;
    console.log('hmm', item, ctx.response);
});

В console.log выведите все хорошо, но кидает 404 Not Found как по умолчанию ответ Коа:

hmm { _id: 5accda0700c0afd3ca50bc67,
  name: 'yuki 2',
  server: 5accd5848ae2e2d2be1760c6,
  owner: 5accd023cc3a90d1f73d4afd,
  createdAt: 2018-04-10T15:36:39.965Z,
  updatedAt: 2018-04-10T15:36:39.965Z,
  __v: 0 } 
 { status: 404,
  message: 'Not Found',
  header: 
   { 'access-control-allow-credentials': 'true',
     'content-type': 'text/plain; charset=utf-8',
     'content-length': '9' },
  body: { _id: 5accda0700c0afd3ca50bc67,
     name: 'yuki 2',
     server: 5accd5848ae2e2d2be1760c6,
     owner: 5accd023cc3a90d1f73d4afd,
     createdAt: 2018-04-10T15:36:39.965Z,
     updatedAt: 2018-04-10T15:36:39.965Z,
     __v: 0 } }

1 ответ

Это может быть из-за того, что обещание mongoose устарело после строки, где вам нужна библиотека mongoose, например:

const mongoose = require('mongoose');

Вы можете добавить одну строку

mongoose.Promise = global.Promise;

или же

mongoose.Promise = require('bluebird');

Если вы используете bluebird в своем проекте.

Другие вопросы по тегам