【问题标题】:What module to export to query Mongodb Atlas in Nodejs在 Nodejs 中导出什么模块来查询 Mongodb Atlas
【发布时间】:2022-01-11 15:37:43
【问题描述】:

我正在尝试将我的 Nodejs 应用程序连接到 Mongodb Atlas 数据库(我尝试使用本地数据库 uri,但它也失败了)。 我看到的问题在于我用于查询数据库的对象。

这是我尝试过的代码

database.js

const {MongoClient} = require('mongodb');
const uri = 'mongodb+srv://myname:pass@myClustername.1unxr.mongodb.net/myDbname?retryWrites=true&w=majority';
// all fields in uri were correctly placed.

const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

client.connect(err => {
  //const collection = client.db("test").collection("devices");
  // perform actions on the collection object

  module.exports = client;

  //client.close();
});

然后在users.js

var client = require('../database');

client.db('mydbname').collection('collname').findOne({"Name": "loop"})._id;
// and other queries etc

在浏览器中,它说

Client.db 不是函数

还有

拓扑已关闭

我尝试了许多其他的方法和组合,它们不太像

module.exports = {

  connectToServer: function( callback ) {
    MongoClient.connect( uri,  { useNewUrlParser: true }, function( err, client ) {
      _db  = client.db('mydbname');
      return callback( err );
    } );
  },

  getDb: function() {
    return _db;
  }
};

提前致谢

【问题讨论】:

  • 您是否尝试过在var client = require('../database'); 之后记录/检查client 的内容?

标签: node.js mongodb node-modules


【解决方案1】:

JavaScript 是异步的,使用 async/await 来处理异步代码。

require('dotenv').config();
let { MongoClient } = require('mongodb');

const url = 
`mongodb+srv://${process.env.DB_USER}:${process.env.DB_USER_PASSWORD}@
${process.env.DB_CLUSTER}.mongodb.net`;

async function connectDatabase() {
    const client = await MongoClient.connect(url, {
    useNewUrlParser: true,
    useUnifiedTopology: true
});
const db = client.db("main");

return {
    listings: db.collection("test_listings")
   };
};

module.exports = { connectDatabase };

【讨论】:

  • 您是从connectDatabase 函数返回我收藏的文档吗?你能在我的users.js 中展示你是如何查询的吗? return db 也不会比这更复杂。
  • connectDatabase()函数用于连接atlas数据库。 const db = client.db("main"); // 用于连接 db "main" return { Listings: db.collection("test_listings") }; }; //将返回“test_listings”集合
  • 好的,但是在users.js 之后var client = require('../database');,如果我这样做client.find().toArray(function(err,result) { console.log(result) }); 它说client.find 不是一个函数
  • client.connect(err => { //const collection = client.db("test").collection("devices"); // 对集合对象执行操作 module.exports = client ; //client.close(); });// module.exports = client;应该是最后一行代码,在循环之外
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多