类型错误:无法读取未定义的属性“toString” - 为什么
TypeError: Cannot read property 'toString' of undefined - why?
这是发生这种情况的行(50(:
var meetingId = meeting._id.toString(),
以下是完整的相关代码:
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 meetingId = meeting._id.toString(),
host = meeting.host;
db.collection('users').findOne({'_id': new ObjectId(host)}, function(err, doc) {
var emails = [];
if (!err && doc && 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) {
var cursor = db.collection('meetings').find({
'email': {'$regex': 'agu', '$options': 'i' }
});
}
callback();
});
}
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();
});
});
如您所见,会议变量(我几乎 100% 确定是问题所在,而不是 _id 属性(作为参数很好地传递给早期函数 findNumberOfNotesByMeeting。我在SO上找到了一些关于我的新函数可能是异步的并且需要回调的事实的信息,但是我已经尝试这样做并且不确定如何使其工作,或者即使这是我的代码的正确修复程序。
您没有将meeting
对象传递给 findMeetings
,后者期望将其作为第二个参数。该函数不是获取 meeting
对象,而是在其位置接收回调函数,因此尝试执行meeting._id
是不确定的。
事实上,findMeetings
功能的目的是什么?它的名称指示它可以查找数据库中的所有会议,也可以查找具有特定 ID 的所有会议。您在没有会议 ID 的情况下调用它,指示您可能正在尝试查找所有会议,但其实现需要会议对象。你需要先清除它。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- toBoolean方法类似于toString
- 类型错误:无法读取未定义的属性“toString” - 为什么
- CanvasJS-访问变量-访问属性toString的权限被拒绝
- 未捕获的类型错误:无法读取未定义的属性“toString”
- 上传未捕获的类型错误:无法读取未定义的属性“toString”
- 事件'拒绝访问属性'toString'
- IE8属性枚举替换的内置属性(例如:“toString”)
- Javascript字符串match()方法返回错误“”;未捕获的类型错误:无法读取属性'toString
- 内部函数无法访问外部函数的作用域,导致无法读取属性toString()的未定义错误
- 未捕获的类型错误:无法读取属性'toString'为null
- Node.js-无法读取属性'toString'在Windows上运行程序包时为null