2016-05-06 7 views
1

のプロパティを読み取ることができません「電子メール」私はエラーを取得しています行54、次のとおりです。はTypeError:ここではヌル

if (docr.emails) { 

そしてここでは、私の元のコードの残りの部分である:

var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert'); 
var ObjectId = require('mongodb').ObjectID; 
var config = require('./config'), 
    xlsx = require('./xlsx'), 
    utils = require('./utils'), 
    _ = require('lodash'), 
    url = config.DB_URL; 

var meetings = []; 

function findNumberOfNotesByMeeting(db, meeting, callback) { 
    var meetingId = meeting._id.toString(), 
     meetingName = meeting.name.displayValue, 
     attendees = meeting.attendees; 
     host = meeting.host; 

    var count = 1, pending = 0, accepted = 0; 
    console.log("==== Meeting: " + meetingName + '===='); 
    _.each(attendees, function(item) { 
     console.log(count++ + ': ' + item.email + ' (' + item.invitationStatus + ')'); 
     if (item.invitationStatus == 'pending') { pending++; } 
     else if (item.invitationStatus == 'accepted') { accepted++; } 
    }); 
    console.log("*** " + attendees.length + ", " + pending + "," + accepted); 

    db.collection('users').findOne({'_id': new ObjectId(host)}, function(err, doc) { 
     var emails = []; 
     if (doc.emails) { 
      doc.emails.forEach(function(e) { 
       emails.push(e.email + (e.primary ? '(P)' : '')); 
      }); 
     } 
     var email = emails.join(', '); 
     if (utils.toSkipEmail(email)) { 
      callback(); 
     } else { 
      db.collection('notes').find({ 'meetingId': meetingId }).count(function(err, count) { 
       if (count != 0) { 
        console.log(meetingName + ': ' + count + ',' + attendees.length + ' (' + email + ')'); 
        meetings.push([ meetingName, count, email, attendees.length, pending, accepted ]); 
       } 
       callback(); 
      }); 
     } 
    }); 
} 

function findMeetings(db, meeting, callback) { 
    var host = meeting.host; 

    db.collection('users').findOne({'_id': new ObjectId(host)}, function(err, docr) { 
     var emails = []; 
     if (docr.emails) { 
      docr.emails.forEach(function(e) { 
       emails.push(e.email + (e.primary ? '(P)' : '')); 
      }); 
     } 
     var email = emails.join(', '); 


     if (utils.toSkipEmail(email)) { 
      callback(); 
     } else { 
     var cursor = db.collection('meetings').find({ 
      'email': {'$regex': 'abc', '$options': 'i' } 
     }); 
     } 


    cursor.count(function(err, count) { 
     console.log('count: ' + count); 
     var cnt = 0; 
     cursor.each(function(err, doc) { 
      assert.equal(err, null); 
      if (doc != null) { 
       findNumberOfNotesByMeeting(db, doc, function() { 
        cnt++; 
        if (cnt >= count) { callback(); } 
       }); 
      } 
     }); 
    }); 
    }); 
}; 


MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    findMeetings(db, function() { 
     var newMeetings = meetings.sort(function(m1, m2) { return m2[1] - m1[1]; }); 
     newMeetings.splice(0, 0, [ 'Meeting Name', 'Number of Notes', 'Emails' ]); 
     xlsx.writeXLSX(newMeetings, config.xlsxFileNameMeetings); 
     db.close(); 
    }); 
}); 
+1

エラーは何ですか。 'find '()メソッドのコールバックはエラー、ヌル結果、または一致するドキュメントを返すことができるので、' docr.email'をチェックする前にまず 'docr'の存在をチェックする必要があります。私の2cは 'findOne()'がヌル結果を返す結果、エラーが 'docr.email'にエラーを投げたことを伝えています。 – chridam

+0

さて、私は今それを修正しようとしました\t \t if(docr = null){ \t \t \t callback(); \t \t};原因となる行の前にTypeError:nullのプロパティ 'emails'を読み取ることができません。それはトリックをするようには見えないが、私はヌルのdocr(これをチェックする方法も正確にはわからない)で読むことが正しいと思う。 –

答えて

0

てみてください次のようになります。

function findMeetings(db, meeting, callback) { 
    var host = meeting.host; 

    db.collection('users').findOne({'_id': new ObjectId(host)}, function(err, docr) { 
     var emails = []; 

     if (!err && docr && docr.emails) { 
      docr.emails.forEach(function(e) { 
       emails.push(e.email + (e.primary ? '(P)' : '')); 
      }); 
     } 

     ... 
+0

ありがとう...しかし、私はこのスクリプトの最後に電子メールが空であるのを見ています...なぜそれが本当にわかりません。スクリプトは元の投稿に載せた以前の部分とほとんど同じですが、うまく機能します。私は変数meetingId = meeting._id.toString()をこの新しいスクリプトの最初に追加しようとしました。エラーが出ます:TypeError:未定義の 'toString'プロパティを読み取ることができません。 –

関連する問題