NodeJS MongoClient.connect没有响应

uinbv5nw  于 2023-02-08  发布在  Node.js
关注(0)|答案(2)|浏览(642)

我正在尝试按照他们网站上的官方教程将我的NodeIdejs(Express)与我的MongoDBMap集连接起来。
下面是我的***conn.js***代码:

const { MongoClient } = require("mongodb");
const Db = process.env.ATLAS_URI;

let _db;

module.exports = {
  connectToServer: function (callback) {
    MongoClient.connect(
      Db,
      { useNewUrlParser: true, useUnifiedTopology: true },
      (err, db) => {
        console.log('THIS LOG IS NOT DISPLAYED')
        if (db) {
          _db = db.db("employees");
          console.log("Successfully connected to MongoDB");
        }
        return callback(err);
      }
    );
  },

  getDb: function () {
    return _db;
  },
};

下面是***server.js***,我在这里调用***conn.js***中的connectToServer()函数

const express = require("express");
const app = express();

const cors = require("cors");
require("dotenv").config({ path: "./config.env" });

const port = process.env.PORT || 5000;

app.use(cors());
app.use(express.json());
app.use(require("./routes/record"));
const dbo = require("./db/conn");
 
app.listen(port, () => {
  // HERE IS WHERE I CALL THE FUNCTION
  dbo.connectToServer(err => {
    if (err) console.error(err);
  });
  console.log(`Server is running on port: ${port}`);
});

请注意,我看到“服务器运行在端口:5000”消息,但我没有得到“成功连接到MongoDB”消息,我也没有得到任何错误。
P.S.我让我的MongoDB网络访问0.0.0.0,这样任何IP地址都可以访问它。另外,如果我为我的ATLAS_URI提供了错误的用户名和密码,我会得到一个身份验证错误。

9bfwbjaz

9bfwbjaz1#

连接返回的承诺,你可以使用如下.

let _db;
const client = new MongoClient(Db, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

module.exports = {
  connectToServer: async (callback) => {
    await client.connect();
    console.log("Connected successfully to server");
    _db = client.db(dbName);
    console.log("Successfully connected to MongoDB");
  },

  getDb: function () {
    return _db;
  },
};

注意:您可以根据需要更改顺序,先连接到数据库,然后启动服务器。根据使用情况,这是完全可选的。

(async () => {
  try {
    await dbo.connectToServer();
    app.listen(port, async () => {
      // HERE IS WHERE I CALL THE FUNCTION
      console.log(`Server is running on port: ${port}`);
    });
  } catch (error) {
    console.log(error);
  }
})();
xggvc2p6

xggvc2p62#

回调支持已从v5中删除,因此不会打印回调函数中的console.log语句。要使其正常工作,您可以使用promises/async-await。由于相同的原因,当身份验证错误时会引发错误,因为连接函数正在运行,但在这种情况下失败。
相同. =〉“Node.js driver v5放弃了对回调的支持,转而支持仅承诺API”的更改日志。

相关问题