我是节点的新手,我在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云上。
答案 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 连接在所有路由中都可用。