Как проверить подключение MongoDB В javascript? - PullRequest
0 голосов
/ 16 апреля 2020

Я использовал MongoDB и написал соединение. Итак, я хочу подключить базу данных MongoDB к своему проекту, но до сих пор не могу понять, почему она не подключена к базе данных? И как я могу проверить соединение?

I написал мой файл db. js, как показано ниже:

const mongodb = require("mongodb");

const connectionString =
  'mongodb+srv://database_user:database_password@server";';

mongodb.connect(
  connectionString,
  { useNewUrlParser: true, useUnifiedTopology: true },
  function (err, client) {
    module.exports = client.db();
    const app = require("./app");
    app.listen(3000);
  }
);

И я использовал этот db. js в Model / Users. js как показано ниже:

const usersCollection = require("../db").collection("users");
const validator = require("validator");

let User = function (data) {
  this.data = data;
  this.errors = [];
};

User.prototype.cleanUp = function () {
  if (typeof this.data.username != "string") {
    this.data.username == "";
  }
  if (typeof this.data.email != "string") {
    this.data.email == "";
  }
  if (typeof this.data.password != "string") {
    this.data.password == "";
  }
  // this.data = {
  //   username: this.data.username.trim().toLowerCase(),
  //   email: this.data.email.trim().toLowerCase(),
  //   password: this.data.password,
  // };
};
//For bogus Properties

User.prototype.validate = function () {
  if (this.data.username == "") {
    this.errors.push("You Should insert username");
  }
  if (
    this.data.username != "" &&
    !validator.isAlphanumeric(this.data.username)
  ) {
    this.errors.push("You can use Number and characters");
  }
  if (!validator.isEmail(this.data.email)) {
    this.errors.push("You Should insert email");
  }
  if (this.data.password == "") {
    this.errors.push("You Should insert password");
  }
  if (this.data.password.lenght > 0 && this.data.password.lenght < 12) {
    this.errors.push(
      "Password must be at least 3 Characters and maximum 12 characters."
    );
    if (this.data.password.lenght > 100) {
      this.data.errors.push("Password In over qualified 100 Characters!!!");
    }

    if (this.data.username.lenght > 0 && this.data.username.lenght < 3) {
      this.data.errors.push(
        "username must be at least 3 Characters and maximum 3  characters."
      );
    }
    if (this.data.username.lenght > 30) {
      this.data.username.errors,
        push("username In over qualified 30 Characters!!!");
    }
  }
};

User.prototype.register = function () {
  //Step #1: Validate User data
  this.cleanUp();
  this.validate();

  if (!this.errors.lenght) {
    usersCollection.insertOne(this.data);
  }
};
module.exports = User;

Когда Я хочу запустить код Я получил ошибку в коллекции:

/Users/shamimi/Desktop/js/complex-app/models/User.js:1
const usersCollection = require("../db").collection("users");

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

проблема в том, что вы ничего не возвращаете из db. js, вы подключаетесь к mon go и запускаете express.

, по моему мнению, вы должны отделить подключение db от express start, потому что вы планируете использовать db во всех своих моделях и не будете запускать сервер express каждый раз. Вам также следует рассмотреть возможность создания только одного подключения к базе данных.

db. js может выглядеть следующим образом:

const client = require("mongodb").MongoClient;
const config = require("../config");
let _db;

function initDb(callback) {
    if (_db) {
        console.warn("Trying to init DB again!");
        return callback(null, _db);
    }
client.connect(config.db.connectionString, config.db.connectionOptions, connected);
function connected(err, db) {
        if (err) {
            return callback(err);
        }
        console.log("DB initialized - connected to: " + config.db.connectionString.split("@")[1]);
        _db = db;
        return callback(null, _db);
    }
}

function getDb() {
    return _db;
}


module.exports = {
    getDb,
    initDb
};

Тогда вы можете использовать его следующим образом:

Ваш основной файл будет выглядеть следующим образом:

const initDb = require("./db").initDb;
const getDb = require("./db").getDb;
const app = require("express")();
const port = 3001;
app.use("/", exampleRoute);
initDb(function (err) {
    app.listen(port, function (err) {
        if (err) {
            throw err; //
        }
        console.log("API Up and running on port " + port);
    });
);
function exampleRoute(req, res){
 const db = getDb();
 //Do things with your database connection
 res.json(results);
}

PS Если это новое приложение, использующее последнюю версию NodeJS, вам следует изучить ES6 и более современные способы создания классов, вместо этого используйте async / await. обратных вызовов

0 голосов
/ 16 апреля 2020

Добавьте .then и .catch, как я сделал ниже, и вы увидите, было ли ваше соединение успешным

mongodb.connect(
  connectionString,
  { useNewUrlParser: true, useUnifiedTopology: true },
  function (err, client) {
    module.exports = client.db();
    const app = require("./app");
    app.listen(3000);
  }
).then(() => console.log("DB Connected!"))
  .catch(err => {
    console.log(
      "Error in DB connection : " + JSON.stringify(err, undefined, 2)
    );
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...