读取集合数据成功然后抛出错误

时间:2016-09-22 06:49:25

标签: javascript node.js mongodb

这是我的server.js

我正在尝试通过firstName和lastName获取数据, 然后传递数据并记录firstName:

mongoDb.getFromDb(req.body.firstName, req.body.lastName)
  .then(
    rows => {
      rows.each(function(err, item) {
        console.log(item.firstName);
      })
    }
  )
});

mongoDb.js

我有一个init函数,它创建一个名为connectingDb的promise。 它连接到DB。

// Use connect method to connect to the Server
function init() {
  connectingDb = new Promise(
    function(resolve, reject) {
      MongoClient.connect(url, function(err, db) {
        if (err) {
          console.log('Unable to connect to the mongoDB server. Error:', err);
          reject(err);
        } else {
          console.log('Connection established to', url);

          //Close connection
          //db.close();
          resolve(db);
        }
      });

    }
  );
}

此函数获取名字和姓氏,并按这些条件返回行。

function getFromDb(firstName, lastName) {
  return new Promise(
    function(resolve, reject) {
      connectingDb.then(myDb => {
        console.log('a1a1a1');

        resolve(myDb.collection('alon').find({
          "firstName": firstName,
          "lastName": lastName
        }));

      }).catch(err => {
        console.log(err)
      })
    }

  )
}

这是我在`mongodb powershell'中写的数据:

the data of the collection

错误是:

a
D:\Search\node_modules\mongodb\lib\utils.js:98
   process.nextTick(function() { throw err; });
                              ^
TypeError: Cannot read property 'firstName' of null

虽然a是第一个名字..

我猜函数mongoDb.getFromDb因为承诺而被调用两次。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

rowsitem可能会更改为rows.each吗? 也就是说,而不是

...
  rows.each(function(err, item) {
    console.log(rows.firstName);
  })
...

更像是

...
  rows.each(function(err, item) {
    console.log(item.firstName);
  })
...

更新:此外,您可能希望使用forEach代替each,这样

getFromDb(firstName, lastName)
  .then(
    rows => {
      rows.forEach(function(item) {      
        console.log(item.firstName);
      })
    }
  );