NVM으로 QueryCursor.js 몽구스 오류를 해결하는 방법

8029 단어 webdevnvmmongoosenode
TL; DR

This is my attempt at resolving this issue raised on GitHub. I discovered that it was a NodeJS incompatibility issue. Downgrading your NodeJS version to 12.x resolves this error.



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)


위 오류는 Mongoose와 NodeJS 버전 17.5 간의 비호환성 문제로 인해 발생합니다. repo이 제기된 Mongoose GitHubissue #11377에서 몇 가지 제안이 제공되었지만 모두 시도했지만 오류가 해결되지 않았습니다. 또한 문제#11377는 문제#11381에 의해 해결된 것으로 표시되었지만 나에게 해당되지 않았습니다.

QueryCursor.js 몽구스 오류를 해결하는 방법



이것이 NodeJS와 Mongoose 간의 호환성 문제라는 것을 알고 있으므로 가장 좋은 해결책은 내 Node.js 버전을 버전 14 이전으로 다운그레이드하는 것입니다🤔

하지만 잠깐, Node.js 버전 <16.x 😟와 호환되지 않는 로컬 컴퓨터에 실행 중인 다른 프로젝트가 있습니다.

여기서 NVM - (노드 버전 관리자)가 작동합니다. NVM을 사용하면 로컬 시스템에 여러 버전의 NodeJS를 설치하고 실행할 수 있습니다. NVM 설치 및 사용 방법에 대한 자세한 안내는 Digital Ocean의 thistutorial를 참조하십시오.

NVM 설치 및 사용



이 가이드에서는 Mongoose 프로젝트에 NVM 설치 및 Node.js v12 사용의 필수 사항을 안내합니다.

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)


Your output will definitely differ from mine depending on how many versions of Node.js you have installed on your machine.



다음 단계에서는 프로그램이나 프로젝트에서 사용할 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의 기본 활성 버전을 유지합니다.

추가 자료


  • How To Run Multiple Versions of Node.js with Node Version Manager
  • How do I install multiple node js version on the same machine

  • 나를 따르라


  • 트위터에서
  • GitHub에서@eunit99
  • 좋은 웹페이지 즐겨찾기