node.js - Koa-router 忽略 Mongoose 的 async/await 并始终返回 404

标签 node.js mongoose koa koa2 koa-router

这是路线代码。当我使用评论Promise时,它在正文中返回 123。但是使用 mongoose 查询它会返回 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就像默认的 koa 响应:

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 } }

最佳答案

这可能是因为 Mongoose promise 被弃用,在您需要 Mongoose 库的行之后,例如:

const mongoose = require('mongoose');

您可以添加一行

mongoose.Promise = global.Promise;

mongoose.Promise = require('bluebird');

如果您在项目中使用 bluebird。

关于node.js - Koa-router 忽略 Mongoose 的 async/await 并始终返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778683/

相关文章:

javascript - 使用函数参数值作为字典键

node.js - 构建我的 Mongoose 模式 : embedded array , 填充的最佳方法,子文档?

javascript - Find() 函数返回未定义 - Mongoose 和 Node.js

javascript - 在所有迭代完成之前调用 node.js async.each() 回调

javascript - 在express.js中设置cookie出现j : prefix

javascript - 如何在KOA中编写公共(public)模块?

node.js - 保护 Twitter Webhook

javascript - 如何在 Node js中将路由与 Controller 链接起来?

javascript - Node 工作线程无法加载外部模块?

node.js - Mongoose/Nodejs 验证错误处理、内存泄漏问题