如何在mongoose connect之后获取数据库?

时间:2017-12-09 08:36:11

标签: node.js mongodb mongoose

我是节点的新手,我在mlab上托管了一个远程数据库,我想使用mongoose.connect连接到我的数据库。我想访问该数据库到指定的路由。

我的代码如下:

var db = null;

db = mongoose.connect('mongodb://username:password@ds135186.mlab.com:12345/collection', function (err, database) {
  db = database
});

我将路线定义为:

app.get('/fetchtest', function (req, res) {
  db.collection('okhitweets').find({}).limit(10).toArray(function (err, doc) {
    res.send(JSON.stringify(doc))
  })
});

我收到can't find collection of undefined因为db没有初始化。我尝试在线查找如何访问数据库,但无法获得太多帮助。我该如何访问这个数据库。我的应用程序将相当小,所以我不需要在不同的文件等中定义路由,并且数据库存在于mlab云上。

1 个答案:

答案 0 :(得分:3)

您可以在数据库分配后立即将以下内容添加到 server.js (即主文件)(不在您指定的范围内,但在全局范围之后)。

app.use( (req, res) => {
    req.db = db
})

然后在您的路线(或主档)中说

app.get("/chocolate", (req, res) => {
    const db = req.db
    db.collection("chocolates").find({})
         .toArray()
         .then(results => {
              res.status(200).send(results)
          })
})

您还可以检查EventEmitter,以便仅在连接到数据库时启动服务器。

如果有帮助,请告诉我。

编辑1:如果你仍然“活着”(只是在开玩笑),下面的代码段可能比我分享的代码段更适用

app.all('*', (req, res, next) => {
    req.db = db;
    next();
});

这也使 db 连接在所有路由中都可用。