【问题标题】:Why my function for retrieving data from mongodb is returning undefined?为什么我从 mongodb 检索数据的函数返回未定义?
【发布时间】:2022-11-19 01:16:17
【问题描述】:

我正在尝试从 nodejs 返回 mongodb 集合中的所有条目。 我已经编写了该函数,如果我控制台记录结果,它就会工作,我会看到集合中的所有对象,但如果我尝试返回结果,我就会变得不确定。 我不明白为什么?之后我也尝试过 JSON stringify 和 JSON parse 但仍然没有成功。

这是我的代码: `

const mongoUrl = "mongodb://192.168.8.156:27017/";

const getRoomReadings = function (id) {
  MongoClient.connect(mongoUrl, function (err, db) {
    if (err) throw err;
    let dbo = db.db(`room${id}`);
    dbo
      .collection("env")
      .find({})
      .toArray(function (err, result) {
        if (err) throw err;
        return result;
      });
  });
};

// API RoomX route
app.get("/api/r:id", (req, res) => {
  const rez = getRoomReadings(req.params.id);
  console.log(rez);
});

`

我正在使用 nodejs 和 express。 请帮我。提前致谢。

之后我也尝试过 JSON stringify 和 JSON parse 但仍然没有成功。

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    我不知道你为什么每次发出请求时都创建连接,但使用 promises 会对你有所帮助。

    例子:

    const mongoUrl = "mongodb://192.168.8.156:27017/";
    
    const getRoomReadings = function (id) {
      return new Promise((res, rej) => {
        MongoClient.connect(mongoUrl, function (err, db) {
          if (err) rej(err);
          let dbo = db.db(`room${id}`);
          dbo
            .collection("env")
            .find({})
            .toArray(function (err, result) {
              if (err) rej(err);
              return res(result);
            });
        });
      })
    };
    
    // API RoomX route
    app.get("/api/r:id", async (req, res) => {
      const rez = await getRoomReadings(req.params.id);
      console.log(rez);
    });
    

    创建连接的更好方法是创建一个文件调用 conn.js 并在该文件中创建连接

    const { MongoClient } = require("mongodb");
    const connectionString = process.env.ATLAS_URI;
    const client = new MongoClient(connectionString, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });
    
    let dbConnection;
    
    module.exports = {
      connectToServer: function (callback) {
        client.connect(function (err, db) {
          if (err || !db) {
            return callback(err);
          }
    
          dbConnection = db.db(<db_name>);
          console.log("Successfully connected to MongoDB.");
    
          return callback();
        });
      },
    
      getDb: function () {
        return dbConnection;
      },
    };
    

    初始化连接并使用获取数据库获得连接

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2018-02-04
      • 2022-01-16
      相关资源
      最近更新 更多