TypeError: Невозможно прочитать свойство 'apply' из неопределенного в EventEmitter
Я создаю приложение js для узла с планировщиком DHTMLX в качестве одной из страниц. Однако при загрузке страницы приложение вылетает, и я получаю следующую ошибку:
Ошибка типа: невозможно прочитать свойство 'apply' из неопределенного в EventEmitter.(/ Node_modules/mongoskin/lib/collection.js:52:21))
Вот модуль ссылки на ошибки:
SkinCollection.prototype._open = function(callback) {
var collection_args = this._collection_args.concat([callback]);
this._skin_db.open(function(err, db) {
if(err) return callback(err);
db.collection.apply(db, collection_args);
});
}
И вот часть моего app.js, которая вызывает ошибку, когда я не включаю этот код, календарь не приводит к сбою приложения, но у меня нет возможности отправить данные в мой атласный кластер MongoDB.
app.js
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/init', function(req, res){
db.event.insert({
text:"My test event A",
start_date: new Date(2018,8,1),
end_date: new Date(2018,8,5)
});
db.event.insert({
text:"My test event B",
start_date: new Date(2018,8,19),
end_date: new Date(2018,8,24)
});
db.event.insert({
text:"Morning event",
start_date: new Date(2018,8,4,4,0),
end_date: new Date(2018,8,4,14,0)
});
db.event.insert({
text:"One more test event",
start_date: new Date(2018,8,3),
end_date: new Date(2018,8,8),
color: "#DD8616"
});
res.send("Test events were added to the database")
});
app.get('/data', function(req, res){
db.event.find().toArray(function(err, data){
//set id property for all records
console.log(err);
for (var i = 0; i < data.length; i++)
data[i].id = data[i]._id;
//output response
res.send(data);
});
});
app.post('/data', function(req, res){
var data = req.body;
var mode = data["!nativeeditor_status"];
var sid = data.id;
var tid = sid;
delete data.id;
delete data.gr_id;
delete data["!nativeeditor_status"];
function update_response(err, result){
if (err)
mode = "error";
else if (mode == "inserted")
tid = data._id;
res.setHeader("Content-Type","application/json");
res.send({action: mode, sid: sid, tid: tid});
}
if (mode == "updated")
db.event.updateById( sid, data, update_response);
else if (mode == "inserted")
db.event.insert(data, update_response);
else if (mode == "deleted")
db.event.removeById( sid, update_response);
else
res.send("Not supported operation");
});
Я изучаю JavaScript только на прошлой неделе, и я очень плохо знаком с программированием. Я не понимаю, почему происходит эта ошибка. Когда я запускаю приложение Scheduler как отдельную функцию, оно работает безупречно. Только когда я пытаюсь реализовать это на своем веб-сайте, он выдает эту ошибку.
1 ответ
Обновление: правильный ответ
Этот вопрос является дубликатом: MongoSkin "Невозможно прочитать свойство 'apply' of undefined"
Mongoskin поддерживает только MongoDB 2.x, эта ошибка возникает при использовании MondoDB 3.x.
Оригинальный (неверный) ответ
Я новичок в MongoDB, но я уверен, что проблема в том, что вам нужно заменить collection
с фактическим именем таблицы в этой строке:
db.collection.apply(db, collection_args);
Так, например, если имя таблицы / коллекции было skin
строка будет выглядеть так:
db.skin.apply(db, collection_args);
(Обратите внимание, как, когда app.j
выполняет операцию БД в таблице событий, она вызывает db.event.insert()
, так далее...)