我试图用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();
});
});
*/
答案 0 :(得分:2)
我发现代码有一些问题。
没有理由让您将encodeURIComponent
与静态字符串一起使用。但是希望这只是一些真实凭据的占位符,这些凭据将来自环境变量。
为变量 uri 分配了一个包含模板模式的静态字符串,但是它使用双引号而不是反引号,因此不会插值变量, turn将生成无效的连接字符串。
相同的变量 uri 用双引号"
替换了双引号`
后,由于奇怪的主机名“ 群集”也应来自env var的某种设置。
该代码似乎旨在使用立即调用的函数表达式(简称为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()
})()