Ошибка типа: невозможно прочитать свойство '$ __' из неопределенного - Mongoose v5. ^ - PullRequest
0 голосов
/ 02 октября 2019

Я думаю, что это проблема с async.js, но я не могу понять, почему.

Я изучал эту проблему в течение нескольких недель и пока не нашел ничего убедительного. Я работаю над учебником, и у меня возникла проблема с созданием нового пользователя [создание нового документа mongodb (и, возможно, дополнительного документа)]. Позвольте мне сначала начать со стека.

Базовая линия: MongoDB Standalone, Express, NodeJS. При сборке я использовал последнюю версию каждого из перечисленных здесь модулей:

"async": "^3.1.0",
"bcryptjs": "^2.4.3",
"body-parser": "^1.19.0",
"bootstrap": "^4.3.1",
"connect-flash": "^0.1.1",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"express-handlebars": "*",
"express-messages": "^1.0.1",
"express-session": "^1.16.2",
"express-validator": "^5.3.1",
"http-errors": "~1.6.3",
"mongodb": "^3.3.2",
"mongoose": "^5.7.3",
"morgan": "~1.9.1",
"passport": "^0.4.0",
"passport-http": "^0.3.0",
"passport-local": "^1.0.0",
"serve-favicon": "^2.5.0"

Когда я запускаю файлы проекта из учебника, я использую более старые версии Mongoose ... менее v5.0.

Я установил несколько ловушек, и я детализировал свою проблему до следующей строки как дочерний:: 1010 *

// Create Student User
module.exports.saveStudent = function(newUser, newStudent, callback){
    console.log('Made it here');
    bcrypt.hash(newUser.password, 10, function(err, hash){
        console.log('Made it to the hash');
        if(err) throw errl
        // Set hash
        console.log('No errors');
        newUser.password = hash;
        console.log('Student is being saved!');

        //************** Here's the Problem ****************
        async.parallel([newUser.save, newStudent.save], callback);

        console.log('handled async');
    });
}

Я никогда не дошел до последнего оператора console.logтаким образом, я могу предположить, что это никогда не обрабатывает асинхронность. Таким образом, вместо добавления записи в базу данных, я получаю это как ошибку:

Made it here POST /users/register 302 183.633 ms - 46 Made it to the hash No errors Student is being saved! /Users/zp/Projects/Fortis_PHP/chl/node_modules/mongoose/lib/model.js:433 if (this.$__.saving) {
           ^

TypeError: Cannot read property '$__' of undefined
    at Model.save (/Users/zp/Projects/Fortis_PHP/chl/node_modules/mongoose/lib/model.js:433:12)
    at eachfn (/Users/zp/Projects/Fortis_PHP/chl/node_modules/async/dist/async.js:2952:28)
    at eachOfArrayLike (/Users/zp/Projects/Fortis_PHP/chl/node_modules/async/dist/async.js:504:13)
    at eachOf (/Users/zp/Projects/Fortis_PHP/chl/node_modules/async/dist/async.js:555:16)
    at awaitable(eachOf) (/Users/zp/Projects/Fortis_PHP/chl/node_modules/async/dist/async.js:208:32)
    at awaitify (/Users/zp/Projects/Fortis_PHP/chl/node_modules/async/dist/async.js:2951:9)
    at awaitable() (/Users/zp/Projects/Fortis_PHP/chl/node_modules/async/dist/async.js:208:32)
    at Object.parallel (/Users/zp/Projects/Fortis_PHP/chl/node_modules/async/dist/async.js:3033:16)
    at /Users/zp/Projects/Fortis_PHP/chl/models/user.js:53:15
    at /Users/zp/Projects/Fortis_PHP/chl/node_modules/bcryptjs/dist/bcrypt.js:1353:21
    at Immediate.next (/Users/zp/Projects/Fortis_PHP/chl/node_modules/bcryptjs/dist/bcrypt.js:1233:21)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)

Поэтому я ищу любые идеи, которые я могу получить о том, что не удается с асинхронным и как получить запись вспасти.

В исследовании, которое я провел, я видел других людей с похожей проблемой, и это, кажется, самый близкий ответ, который я могу найти.


https://github.com/Automattic/mongoose/issues/3889


У кого-нибудь есть идеи? @JohnnyHK, ты знаешь?

...