将Mongodb与Node.js连接

时间:2020-07-13 15:40:19

标签: node.js mongodb

我试图用nodejs开发与NOSQL DB链接的服务器,特别是我用MONGODB开发了它。我不确定我是否可以很好地连接它,因为如果我运行下面的代码,它应该返回插入的元素的id,但是在输出中将其打印为空白,以防我用正常的开发替代异步返回以下错误“ MongoError:拓扑已关闭,请连接“。我试图在 /代码下面的注释/ 中使用代码行,但它返回另一个错误。

我认为我的mongodb与服务器连接不佳,但我不知道我会逐步执行mongodb中提供的命令。(创建一个集群(免费),创建一个用户,创建一个数据库,然后创建一个收集,然后使用之前设置的信息进行连接。)

之所以这样说,是因为我在mongodb上刷新了集群,但是没有任何改变

    const MongoClient = require('mongodb').MongoClient;
    const password = encodeURIComponent('22');
    const user=encodeURIComponent('id');
    const dbs = encodeURIComponent('users');
    const uri = "mongodb+srv://${user}:${password}@cluster/${dbs}?retryWrites=true&w=majority";
    const client = new MongoClient(uri, { useNewUrlParser: true ,useUnifiedTopology:true,  connectTimeoutMS: 30000 ,  keepAlive: 1});

(async()=>{




await client.connect();
const databse=client.db("users");
const collection=databse.collection("readers");

const result= await collection.insertOne( {

    "name":"Chocolate",
    "ingredients":[
        "eggs","chocolates"
    ]
});
console.log(result.insertedId);
//client.close();
});
/*
   client.connect(err => {
   const collection2 = client.db("users").collection("readers");
   // perform actions on the collection object

   var myobj = { name: "Ajeet Kumar", age: "28", address: "Delhi" };  
   collection2.insertOne(myobj, function(err, res) {  
   if (err) throw err;  
   console.log("1 record inserted");
   //client.close();
   });
   });
   */

1 个答案:

答案 0 :(得分:2)

我发现代码有一些问题。

  1. 没有理由让您将encodeURIComponent与静态字符串一起使用。但是希望这只是一些真实凭据的占位符,这些凭据将来自环境变量。

  2. 为变量 uri 分配了一个包含模板模式的静态字符串,但是它使用双引号而不是反引号,因此不会插值变量, turn将生成无效的连接字符串。

  3. 相同的变量 uri 用双引号"替换了双引号`后,由于奇怪的主机名“ 群集”也应来自env var的某种设置。

  4. 该代码似乎旨在使用立即调用的函数表达式(简称为IIFE),但实际上它甚至没有调用该函数,因为在函数块后缺少括号对。

假设您的凭据正确无误,下面的更新代码将为您解决问题:

const MongoClient = require('mongodb').MongoClient
const password = encodeURIComponent('22')
const user = encodeURIComponent('id')
const dbName = encodeURIComponent('users')
const host = process.env.MONGO_HOST || 'localhost' // or whatever is the hostname you want
const uri = `mongodb+srv://${user}:${password}@${host}/${dbName}?retryWrites=true&w=majority`

const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true, connectTimeoutMS: 30000, keepAlive: 1 })

;(async () => {
  await client.connect()
  const databse = client.db('users')
  const collection = databse.collection('readers')

  const doc = {
    name: 'Chocolate',
    ingredients: [
      'eggs', 'chocolates'
    ]
  }

  const result = await collection.insertOne(doc)
  console.log({ result })
  console.log(result.insertedId)
  client.close()
})()