Node.js 解决mongodb/monk find()承诺的问题

Node.js 解决mongodb/monk find()承诺的问题,node.js,express,monk,Node.js,Express,Monk,我遇到了一个简单的mongodb/monk find()不起作用的问题。我知道find()返回promise,解决它的三种方法都不起作用。我做错了什么?谢谢 这是我的密码。3条路线全部不返回,需要取消: const express = require('express'); const router = express.Router(); const db = require('monk')('mongodb://127.0.0.1:27017/storage');

我遇到了一个简单的mongodb/monk find()不起作用的问题。我知道find()返回promise,解决它的三种方法都不起作用。我做错了什么?谢谢

这是我的密码。3条路线全部不返回,需要取消:

    const express = require('express');
    const router = express.Router();

    const db = require('monk')('mongodb://127.0.0.1:27017/storage');
    const files = db.get('fs.files');

    router.get('/1', async (req, res) => {
      const result = await files.find();
      res.json(result);
    });

    router.get('/2', (req, res) => {
      files.find()
       .then(
          (result) => { res.json(result) },
          (error) => { res.json(error) }
       );
    });


    router.get('/3', (req, res) => {
      files.find({}, (result) => {
        res.json(result)
      });
    });

    module.exports = router;
更新: 我已经摆脱了munk,本地MongoDB驱动程序完成了这项工作:

router.get('/', (req, res) => {
  mongo.MongoClient.connect(mongo_uri, mongoClientOptions, async (err, conn) => {
    assert.ifError(err);
    const files = await conn.db('storage')
      .collection('fs.files')
      .find()
      .toArray();
    res.json(files);
  });
});

问题是我无法检查munk连接管理器是否返回了正确的数据库实例。

解决方案:更改db.get('fs.files');到db.get('files')

这是我的演示项目-> 数据库:演示, 收藏:用户

const express = require('express');
const app = express();
const db = require('monk')('mongodb://127.0.0.1:27017/demo');
const files = db.get('users');

app.get('/1', async (req, res) => {
  const result = await files.find();
  res.json(result);
});

app.get('/2', (req, res) => {
  files.find()
   .then(
      (result) => { res.json(result) },
      (error) => { res.json(error) }
   );
});

app.get('/3', (req, res) => {
  files.find({}, (result) => {
    res.json(result)
  });
});

app.listen(4000, () => {
    console.log('Example app listening at 4000')
  })
module.exports = app;

解决方案:更改db.get('fs.files');到db.get('files')

这是我的演示项目-> 数据库:演示, 收藏:用户

const express = require('express');
const app = express();
const db = require('monk')('mongodb://127.0.0.1:27017/demo');
const files = db.get('users');

app.get('/1', async (req, res) => {
  const result = await files.find();
  res.json(result);
});

app.get('/2', (req, res) => {
  files.find()
   .then(
      (result) => { res.json(result) },
      (error) => { res.json(error) }
   );
});

app.get('/3', (req, res) => {
  files.find({}, (result) => {
    res.json(result)
  });
});

app.listen(4000, () => {
    console.log('Example app listening at 4000')
  })
module.exports = app;

你能确认调用
files.find()
实际上是按照它应该做的吗?您是否收到错误或
result
是否实际解决了某些数据?goto1,事实上files.find()与db.get('fs.files').find()相同,如果我们相信mongodb文档,那么它应该是相同的mongodb收集方法find()。它假定使用所有参数,如果作为同步函数调用,则返回挂起的承诺。@goto1,没有错误,所有3个端点都超时。如果调用
,然后在中间件函数之外调用该挂起的承诺,该怎么办?它解决了您所期望的问题吗?另外,
然后
只接受一个回调,在第二个示例中,您传递了回调处理程序和错误处理程序,但这不是使用承诺处理错误的方式。Promise错误在
catch
处理程序中处理。您能否确认实际上调用
files.find()
会执行它应该执行的操作?您是否收到错误或
result
是否实际解决了某些数据?goto1,事实上files.find()与db.get('fs.files').find()相同,如果我们相信mongodb文档,那么它应该是相同的mongodb收集方法find()。它假定使用所有参数,如果作为同步函数调用,则返回挂起的承诺。@goto1,没有错误,所有3个端点都超时。如果调用
,然后在中间件函数之外调用该挂起的承诺,该怎么办?它解决了您所期望的问题吗?另外,
然后
只接受一个回调,在第二个示例中,您传递了回调处理程序和错误处理程序,但这不是使用承诺处理错误的方式。承诺错误在
catch
处理程序中处理。谢谢,Debasis。”“fs.files”和“fs.chunk”都是由GridFS创建的特殊集合。我需要查询这个特定集合。将const files=db.get('fs.files')更改为const files=db.collection('fs.files');试试看。让我知道你的更新。看起来身份验证有问题,请查看上面的评论。谢谢,Debasis。”“fs.files”和“fs.chunk”都是由GridFS创建的特殊集合。我需要查询这个特定集合。将const files=db.get('fs.files')更改为const files=db.collection('fs.files');试试看。让我知道你的更新。看起来身份验证有问题,请检查上面的评论。