【问题标题】:Getting undefine result while fetch the data from mongodb from other controller从其他控制器从 mongodb 获取数据时获取未定义结果
【发布时间】:2019-08-25 14:53:07
【问题描述】:

我是 mongoDB 和 node.js 的新手。我在使用 node.js 获取 mongoDB 集合数据时遇到问题。

我已经连接了 mongodb 并尝试从一个控制器获取一个集合信息到另一个控制器,但是我遇到了类似结果未定义的问题。

请看下面的代码,可能有助于理解

用户注册控制器.js

 let response = {};
MongoClient.connect(config.Database.DFARM.connectString, async function (err, client) {
        if (err) {

            let connError = new Error(500, "Error connecting to DFARM database", err);
            // res.status(connError.status).json(connError);
            response.status = false;
            response.message= connError;
            response.secret = '';
         return response;
        console.log("console3", response);
            // return response;
        }
        else {
            response.status = false;
            response.message= 'An identity for the admin23 user "admin" does not exist in the wallet, call the enrollAdmin application before retrying   ' 
            response.secret = '';
            // return response;
            console.log("console", response);
            //   return response;
    client.db(config.Database.DFARM.dbName).collection("User").find(query1).toArray(function (err, docs) {
                    if(err)
                    {

                        console.log('err db',err);
                        response.status = false;
                        response.message= err;
                        response.secret = '';
                        console.log("console7", response);
                        return response;

                    }
                    else{
                        console.log('Username DB',docs);//this is result
                        console.log('Username DB',docs[0].secret);
                        secret = docs[0].secret;

                        query1.secret = secret;
                      //   setTimeout(() => console.log(name), 5 * 10)
                        console.log('Role',query1);
                      //   output.docs = docs[0].name;
                      // //  res.json(output);
                      // console.log('Role',output);

                      response.status = true;
                      response.message= 'secret generate';
                      response.secret = secret;
                       return response;
                //       res.json(docs);

                  client.close();// look after sometimes
                    }                  

     })
    }
})   

用户控制器.js

UserEnrollController = new UserEnrollController();

UserEnrollController.UserEnroll1(VZID).then((result) => {
     setTimeout(() => {
        console.log("data result", result)
        }, 8000);

我正在尝试使用 .then 结果获取数据,但它显示未定义。所以我放了一些延迟,以便我可以获取数据,但是我仍然得到未定义的结果,但是它应该是“用户名数据库”数据,如下所述。

username prassemp
Username DB [ { _id: 5d5af662dac4af4733802e44,
    LOGIN_ID: 'prassemp',
    FIRSTNAME: 'prassemp',
    LASTNAME: 'kumar',
    ROLEID: '5',
    PHONE: '5657624345',
    EMAIL: 'prassemp@gmail.com',
    USERNAME: 'prassemp',
    PASSWORD: 'BK@love123',
    REPASSWORD: 'BK@love123',
    otp: true,
    profile: 'true',
    approved: 'true',
    profileimage: true,
    verification: true,
    STATUS: 'ACTIVE',
    END_DATE: '',
    CREATE_DATE: 2019-08-19T19:20:01.000Z,
    CREATE_BY: 'testuser',
    MODIFIED_DATE: 2019-08-25T12:46:33.000Z,
    MODIFIED_BY: 'test user',
    DOB: '',
    ADDRESS_LINE_1: '',
    ADDRESS_LINE_2: '',
    ID_CARD: '',
    LOGIN_ID_UPPER: 'PRASSEMP',
    LAST_LOGGED_IN: '',
    SUPERVISOR: 'Abhi',
    secret: 'PEDqgsOCllDG' } ]
Username DB PEDqgsOCllDG
Role { USERNAME: 'prassemp', secret: 'PEDqgsOCllDG' }
secreat PEDqgsOCllDG
data result undefined // **here getting result as undefine however it should be data as in "Username DB"**

请帮助我被困在这里很长时间,从任何地方都没有得到任何可以解决我问题的东西。

谢谢

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    您的 FabricClientRegister.UserEnroll(VZID) 是否返回 Promise? 如果是,你应该检查 Promise 是否解析了一个值

    【讨论】:

      【解决方案2】:

      这是我的愚蠢错误,因为函数也被放入了

      setTimeout(() => { },timeout);

      所以结果也需要延迟一段时间。

       FabricClientRegister.UserEnroll(VZID).then((result) => {
             console.log("data result", result)
              }, 8000);
      

      可能会帮助像我这样了解 node.js 超时功能的新人

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-23
        • 2021-04-26
        • 1970-01-01
        相关资源
        最近更新 更多