簡體   English   中英

如何在 javascript 中測試 MongoDB 連接?

[英]How to test MongoDB connection In javascript?

我使用 MongoDB 並寫了一個連接 所以我想將 MongoDB 數據庫連接到我的項目,但我仍然不明白為什么它沒有連接到數據庫?我該如何測試連接?

我寫了我的 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);
  }
);

我在 Model/Users.js 中使用了這個 db.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");

問題是你沒有從 db.js 返回任何東西,你正在連接到 mongo 並開始 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 而不是回調

像我在下面那樣添加.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)
    );
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM