Подключение Mongodb с nodejs - PullRequest
0 голосов
/ 13 июля 2020

Я пытался разработать сервер с nodejs, который связан с NO SQL DB, в частности, я разработал его с помощью MONGODB. Я не уверен, что мне удастся его правильно подключить, потому что, если я запустил приведенный ниже код, он должен вернуть идентификатор вставленного элемента, но он выводит на выходе пустое поле, в случае, если я заменяю asyn c на при нормальном развитии он возвращает следующую ошибку «MongoError: топология закрыта, пожалуйста, подключитесь». Я пытался использовать строки кода с / комментарием под кодом / , но он возвращает другую ошибку.

Я думаю, что у меня нет хорошего соединения mongodb с моим сервером, но я не знаю, что я следую командам, доставляемым в mongodb, шаг за шагом. (Создать кластер (бесплатно), создать пользователя, создать базу данных, а затем коллекцию, а затем подключитесь, используйте информацию, установленную ранее.)

Я сказал это, потому что я обновил sh кластер на 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 Ответ

1 голос
/ 13 июля 2020

Я вижу несколько проблем с кодом.

  1. Нет причин использовать encodeURIComponent со строками stati c. Но, надеюсь, это просто заполнитель для некоторых реальных учетных данных, которые будут поступать из переменной среды.

  2. Переменной uri назначается stati c строка, содержащая шаблон, но в ней используются двойные кавычки вместо обратных кавычек, поэтому она не будет интерполировать переменные, что, в свою очередь, создаст недопустимую строку подключения.

  3. та же переменная uri , после замены двойных кавычек " обратными кавычками ` может по-прежнему не работать из-за странного имени хоста « cluster », которое должно исходить от какого-то настройки env var.

  4. Похоже, что код имеет намерение использовать выражение немедленно вызываемой функции ( IIFE для краткости), но на самом деле это не так. даже вызывая функцию, потому что пара скобок отсутствует после функционального блока.

Если ваши учетные данные верны, UPD приведенный ниже код должен помочь вам:

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()
})()
...