Как устранить ошибку QueryCursor.js Mongoose с помощью NVM

TL;DR

Это моя попытка решить проблему, поднятую на GitHub. Я обнаружил, что это проблема несовместимости NodeJS. Понижение версии NodeJS до 12.x устраняет эту ошибку.

Если вы работаете с Mongoose версии 6.3.2 и у вас была обновлена версия NodeJS до >14.x или =17.5.0 (это последняя версия на момент написания этого сообщения), вы могли столкнуться с этой ошибкой:

TypeError: Cannot assign to read only property 'map' of object '#<QueryCursor>'
    at Object.<anonymous> (/Users/balonsom/Documents/repos/dungeon-master/node_modules/mongoose/lib/cursor/QueryCursor.js:144:27)
    at Module._compile (node:internal/modules/cjs/loader:1097:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1151:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/Users/balonsom/Documents/repos/dungeon-master/node_modules/mongoose/lib/query.js:12:21)
    at Module._compile (node:internal/modules/cjs/loader:1097:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1151:10)
Enter fullscreen mode Выйти из полноэкранного режима

Приведенная выше ошибка вызвана проблемой несовместимости между Mongoose и NodeJS версии 17.5. На репозитории Mongoose GitHub, где была поднята проблема #11377, было предложено несколько предложений, которые я попробовал, но ни одно из них не решило проблему. Кроме того, проблема #11377 была отмечена как решенная проблемой #11381, что для меня было не так.

Как решить ошибку QueryCursor.js Mongoose

Зная, что это проблема совместимости между NodeJS и Mongoose, лучшим решением будет понизить версию моего Node.js до чего-то более раннего, чем версия 14 🤔.

Но подождите, у меня есть другие проекты на моей локальной машине, которые я запускаю и которые несовместимы с Node.js версии <16.x 😟.

Именно здесь в игру вступает NVM – (Node Version Manager). NVM позволяет нам устанавливать и запускать несколько версий NodeJS на нашей локальной машине. Для получения подробного руководства по установке и использованию NVM, пожалуйста, обратитесь к этому руководству от Digital Ocean.

Установка и использование NVM

В этом руководстве я расскажу вам о том, как установить NVM и использовать Node.js v12 для вашего проекта Mongoose.

Как установить NVM

Чтобы установить NVM, выполните следующие команды

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Войти в полноэкранный режим Выйти из полноэкранного режима

или используя wget.

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Войти в полноэкранный режим Выйти из полноэкранного режима

После установки закройте терминальное приложение, чтобы изменения вступили в силу. Вам также потребуется добавить пару строк в файл запуска оболочки bash. Этот файл может иметь имя .bashrc, .bash_profile или .zshrc в зависимости от вашей операционной системы. Для этого снова откройте приложение терминала и выполните следующие команды:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"
Войти в полноэкранный режим Выйти из полноэкранного режима

Установка NodeJS v12.x

Чтобы установить NodeJS 12, вставьте в терминал следующую команду

nvm install 12
Войти в полноэкранный режим Выйти из полноэкранного режима

После выполнения этой команды в вашем терминале появится следующее сообщение:

Output
Downloading and installing node v12.22.12...
Downloading https://nodejs.org/dist/v12.22.12/node-v12.22.12-darwin-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v12.22.12 (npm v6.14.16)
Ввести полноэкранный режим Выйти из полноэкранного режима

Вы успешно установили NodeJS v12 на свою локальную машину. Это означает, что теперь вы используете несколько версий NodeJS.

Список установленных версий Node.js на вашей машине

Имея несколько различных версий Node.js, мы можем запустить nvm с аргументом ls, чтобы перечислить все установленные версии:

nvm ls
Вход в полноэкранный режим Выйти из полноэкранного режима

Вывод, полученный при выполнении этой команды, может выглядеть примерно так:

v12.22.12
       v14.19.2
        v17.5.0
         system
default -> node (-> v17.5.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.5.0) (default)
stable -> 17.5 (-> v17.5.0) (default)
lts/* -> lts/gallium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12
lts/fermium -> v14.19.2
lts/gallium -> v16.15.0 (-> N/A)
Вход в полноэкранный режим Выйти из полноэкранного режима

Ваш результат будет отличаться от моего в зависимости от того, сколько версий Node.js установлено на вашей машине.

На следующем этапе нам нужно указать, какую версию NodeJS мы хотим использовать в нашей программе или проекте. Для этого выполните следующие шаги:

Использование NodeJS v12 в нашем проекте

cd в директорию вашего проекта, выполнив эту команду

cd <path/to/your/project/directory>
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем выполните эту команду ниже, чтобы указать версию NodeJS, которую вы хотите использовать, в нашем случае v12

nvm use 12
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы получите следующий результат

Now using node v12.22.12 (npm v6.14.16)
Войти в полноэкранный режим Выйти из полноэкранного режима

Поздравляем 🎆🎇🎊🎈

Теперь вы используете версию NodeJS для этого конкретного проекта, сохраняя при этом активную версию Node.js по умолчанию на вашей машине.

Дополнительное чтение

  1. Как запустить несколько версий Node.js с помощью Node Version Manager
  2. Как установить несколько версий node js на одной машине

Следуйте за мной

  1. В Twitter @eunit99
  2. На GitHub @eunit99

Оцените статью
Procodings.ru
Добавить комментарий